【问题标题】:How to modify Expander button background only? WPF如何仅修改 Expander 按钮背景? WPF
【发布时间】:2008-10-30 16:18:23
【问题描述】:

我在一个蓝色背景的窗口上放置了一个扩展器,我想让扩展器的按钮与默认颜色不同(蓝色,它是从窗口接收的)。当我修改扩展器的背景属性时,它会将整个扩展器、标题和全部更改为新颜色。但是,我只想更改按钮本身。谁能指出我正在寻找的正确房产? 谢谢

【问题讨论】:

    标签: wpf expander


    【解决方案1】:

    您不仅要重新模板 Expander ...您还需要重新模板 Expander 模板中的 ToggleButton ...这样您就可以模板绑定 Expander 上设置的背景画笔一路向下穿过 Expander 的视觉效果并进入 ToggleButton 的视觉效果(使用两个 TemplateBindings)。

    当您学习如何修改 WPF 控件的视觉效果时,有一点很有帮助(至少对我而言)是使用 SimpleStyles,因为它们比完全成熟的普通样式更容易复制和修改...样式和模板。

    为此,打开 Blend 并进入资源库(最底部的工具)...如果单击它,您将看到两组控件:系统控件和简单样式。从“简单样式”中获取其中一个控件(您想要的任何一个)并将其放在设计表面上。然后,您可以右键单击它,编辑控制部件(模板),然后编辑副本。这将创建 Simple Styles 样式和模板的副本...然后您可以(更轻松地)根据自己的喜好进行修改。

    (此时我应该注意,然后我将在 Visual Studio 和 Blend 中修改该 xaml(由 Blend 生成)...根据需要来回翻转...并利用每个方面的优势:Blend其所见即所得的设计表面......以及 Visual Studio 的代码编辑和 IntelliSense 支持。)

    我已经起草了一些可以满足您要求的快速 xaml,并将其包含在下面。您应该可以在 Kaxaml 或其他松散的 xaml 编辑器中删除此 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2011-05-19
      • 2013-11-09
      相关资源
      最近更新 更多