Как изменить только фон кнопки Expander? WPF

У меня есть расширитель, помещенный в окно с синим фоном, и я хотел бы сделать кнопку расширителя другим цветом, отличным от цвета по умолчанию (синий, который он получает из окна). Когда я изменяю свойство фона расширителя, он меняет весь расширитель, заголовок и все на новый цвет. Однако хотелось бы, чтобы изменилась только сама кнопка. Может ли кто-нибудь указать мне подходящую недвижимость, которую я ищу? Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
19 309
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно не только заново создать шаблон расширителя ... вам необходимо повторно создать кнопку ToggleButton в шаблоне расширителя. ... так что вы можете привязать шаблон кисти фона, установленный на Expander, на всем пути вниз через визуальные элементы Expander и в визуальные элементы ToggleButton (используя два TemplateBindings).

Одна вещь, которая будет полезна (по крайней мере, для меня), когда вы изучаете, как изменять визуальные элементы элементов управления WPF, - это использовать SimpleStyles, поскольку их намного проще копировать и изменять ... чем полноценные, обычные стили и шаблоны .

Для этого откройте Blend и перейдите в Asset Library (самый нижний инструмент) ... если вы нажмете на нее, вы увидите два набора элементов управления: System Controls и Simple Styles. Возьмите один из элементов управления (какой хотите) из простых стилей и поместите его на поверхность конструктора. Затем вы можете щелкнуть по нему правой кнопкой мыши, «Редактировать элементы управления (шаблон)» и «Редактировать копию». Это создаст копию стиля и шаблона Simple Styles ... которые вы затем (более легко) сможете изменить в соответствии с вашими предпочтениями.

(Я должен отметить, что затем я бы изменил этот xaml (сгенерированный Blend) как в Visual Studio, так и в Blend ... переворачивая туда и обратно по мере необходимости ... и используя сильные стороны каждого: Blend для его WYSIWYG поверхность дизайна ... и Visual Studio за редактирование кода и поддержку IntelliSense.)

Я набросал быстрый xaml, который делает то, что вы просите, и включу его ниже. Вы должны иметь возможность удалить этот xaml в Kaxaml или другом свободном редакторе xaml.

Надеюсь это поможет.

<Page
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
    Width = "640"
    Height = "480"
>
    <Page.Resources>
        <LinearGradientBrush x:Key = "NormalBrush" EndPoint = "0,1" StartPoint = "0,0">
            <GradientStop Color = "#EEE" Offset = "0.0"/>
            <GradientStop Color = "#CCC" Offset = "1.0"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key = "NormalBorderBrush" EndPoint = "0,1" StartPoint = "0,0">
            <GradientStop Color = "#CCC" Offset = "0.0"/>
            <GradientStop Color = "#444" Offset = "1.0"/>
        </LinearGradientBrush>
        <SolidColorBrush x:Key = "GlyphBrush" Color = "#444"/>
        <LinearGradientBrush x:Key = "MouseOverBrush" EndPoint = "0,1" StartPoint = "0,0">
            <GradientStop Color = "#FFF" Offset = "0.0"/>
            <GradientStop Color = "#AAA" Offset = "1.0"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key = "PressedBrush" EndPoint = "0,1" StartPoint = "0,0">
            <GradientStop Color = "#BBB" Offset = "0.0"/>
            <GradientStop Color = "#EEE" Offset = "0.1"/>
            <GradientStop Color = "#EEE" Offset = "0.9"/>
            <GradientStop Color = "#FFF" Offset = "1.0"/>
        </LinearGradientBrush>

        <ControlTemplate x:Key = "newToggleButtonControlTemplate" TargetType = "{x:Type ToggleButton}">
            <Grid Background = "{TemplateBinding Background}">
                <Rectangle
                    x:Name = "Rectangle"
                    Margin = "0,0,0,0"
                    Fill = "Transparent"
                    Stroke = "{DynamicResource NormalBorderBrush}"
                />
                <Path
                    x:Name = "Up_Arrow"
                    HorizontalAlignment = "Center"
                    VerticalAlignment = "Center"
                    Fill = "{DynamicResource GlyphBrush}"
                    Data = "M 0 0 L 4 4 L 8 0 Z"
                />
                <Path
                    x:Name = "Down_Arrow"
                    Visibility = "Collapsed"
                    HorizontalAlignment = "Center"
                    VerticalAlignment = "Center"
                    Fill = "{DynamicResource GlyphBrush}"
                    Data = "M 0 4 L 4 0 L 8 4 Z"
                />
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property = "IsMouseOver" Value = "true">
                    <Setter Property = "Fill" Value = "{DynamicResource MouseOverBrush}" TargetName = "Rectangle"/>
                </Trigger>
                <Trigger Property = "IsPressed" Value = "true">
                    <Setter Property = "Fill" Value = "{DynamicResource PressedBrush}" TargetName = "Rectangle"/>
                </Trigger>
                <Trigger Property = "IsChecked" Value = "true">
                    <Setter Property = "Visibility" Value = "Visible" TargetName = "Down_Arrow"/>
                    <Setter Property = "Visibility" Value = "Collapsed" TargetName = "Up_Arrow"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <Style x:Key = "newExpanderStyle" TargetType = "{x:Type Expander}">
            <Setter Property = "Template">
                <Setter.Value>
                    <ControlTemplate TargetType = "{x:Type Expander}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height = "Auto"/>
                                <RowDefinition Height = "*" x:Name = "ContentRow"/>
                            </Grid.RowDefinitions>
                            <Border
                                x:Name = "Border"
                                Grid.Row = "0"
                                BorderThickness = "{TemplateBinding BorderThickness}"
                                CornerRadius = "2,2,0,0"
                            >
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width = "20"/>
                                        <ColumnDefinition Width = "*"/>
                                    </Grid.ColumnDefinitions>
                                    <ToggleButton
                                        Template = "{DynamicResource newToggleButtonControlTemplate}"
                                        Background = "{TemplateBinding Background}"
                                        IsChecked = "{Binding Path=IsExpanded, Mode=TwoWay, RelativeSource = {RelativeSource TemplatedParent}}"
                                        OverridesDefaultStyle = "True"
                                    />
                                    <ContentPresenter Grid.Column = "1" Margin = "4" RecognizesAccessKey = "True" ContentSource = "Header"/>
                                </Grid>
                            </Border>
                            <Border
                                x:Name = "ExpandSite"
                                Grid.Row = "1"
                                Visibility = "Collapsed"
                                BorderThickness = "1,0,1,1"
                                CornerRadius = "0,0,2,2"
                            >
                                <ContentPresenter
                                    HorizontalAlignment = "{TemplateBinding HorizontalContentAlignment}"
                                    VerticalAlignment = "{TemplateBinding VerticalContentAlignment}"
                                    Margin = "{TemplateBinding Padding}"
                                    Focusable = "false"
                                />
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property = "IsExpanded" Value = "True">
                                <Setter Property = "Visibility" Value = "Visible" TargetName = "ExpandSite"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Page.Resources>

    <Page.Background>
        <LinearGradientBrush EndPoint = "0.997,0.996" StartPoint = "0.002,0.058">
            <GradientStop Color = "#FF63A6DE" Offset = "0"/>
            <GradientStop Color = "#FFC2DEF5" Offset = "1"/>
        </LinearGradientBrush>
    </Page.Background>

    <Grid x:Name = "LayoutRoot">
        <Expander
            Style = "{DynamicResource newExpanderStyle}"
            Header = "Expander"
            HorizontalAlignment = "Left"
            VerticalAlignment = "Top"
            Background = "{DynamicResource NormalBrush}"
        >
            <Grid>
                <Button Content = "Hello World"/>
            </Grid>
        </Expander>
    </Grid>
</Page>

Другие вопросы по теме