【问题标题】:Base Expander Style, override header color基本扩展样式,覆盖标题颜色
【发布时间】:2016-11-08 09:17:29
【问题描述】:

是否可以创建某种基本扩展样式并在派生样式中覆盖标题的背景颜色? 在我的应用程序中,我经常使用扩展器,我想更改标题的背景颜色。我知道我可以复制和粘贴我的样式并编辑颜色,但是基于“基本样式”创建新样式并设置标题的背景颜色会更好。 但我不知道如何访问这种颜色。 这是这条线的颜色:下面我想更改(标题中的边框):Border Name="border"...我无法在派生样式的设置器中访问“border”...

这是我的(基本)风格:

<Style TargetType="Expander" x:Key="ExpanderStyle">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextColor}}"/>
    <Setter Property="Template">
        <Setter.Value>
            <!-- Control template for expander -->
            <ControlTemplate TargetType="Expander" x:Name="exp">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Name="ContentRow" Height="0"/>
                    </Grid.RowDefinitions>
                    <Border Name="border" Grid.Row="0" Background="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" BorderThickness="1" CornerRadius="4,4,0,0" >
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="20" />
                            </Grid.ColumnDefinitions>
                            <ToggleButton x:Name="tb" FontFamily="Marlett" FontSize="9.75" Background="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" Foreground="Black" Grid.Column="1" Content="u" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" />
                            <ContentPresenter x:Name="HeaderContent" Grid.Column="0" Margin="4" ContentSource="Header" RecognizesAccessKey="True" />
                        </Grid>
                    </Border>
                    <Border x:Name="Content" Grid.Row="1" BorderThickness="1,0,1,1" CornerRadius="0,0,4,4" >
                        <ContentPresenter Margin="4" />
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsExpanded" Value="True">
                        <Setter TargetName="ContentRow" Property="Height" Value="{Binding ElementName=Content,Path=Height}" />
                        <Setter Property="Content" TargetName="tb" Value="t"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我想做这样的事情:

<Style x:Key="ExpanderStyleRed" BasedOn="{StaticResource ExpanderStyle}" TargetType="Expander">
            <Setter Property="???" Value="Red"/>
<Style>

【问题讨论】:

    标签: c# wpf xaml expander basedon


    【解决方案1】:

    使用TemplateBinding:

            <Style TargetType="Expander" x:Key="ExpanderStyle">
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextColor}}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <!-- Control template for expander -->
                    <ControlTemplate TargetType="Expander" x:Name="exp">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Name="ContentRow" Height="0"/>
                            </Grid.RowDefinitions>
                            <Border Name="border" Grid.Row="0" Background="{TemplateBinding Background}" BorderThickness="1" CornerRadius="4,4,0,0" >
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="20" />
                                    </Grid.ColumnDefinitions>
                                    <ToggleButton x:Name="tb" FontFamily="Marlett" FontSize="9.75" Background="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" Foreground="Black" Grid.Column="1" Content="u" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" />
                                    <ContentPresenter x:Name="HeaderContent" Grid.Column="0" Margin="4" ContentSource="Header" RecognizesAccessKey="True" />
                                </Grid>
                            </Border>
                            <Border x:Name="Content" Grid.Row="1" BorderThickness="1,0,1,1" CornerRadius="0,0,4,4" >
                                <ContentPresenter Margin="4" />
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsExpanded" Value="True">
                                <Setter TargetName="ContentRow" Property="Height" Value="{Binding ElementName=Content,Path=Height}" />
                                <Setter Property="Content" TargetName="tb" Value="t"></Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
        <Style x:Key="ExpanderStyleRed" BasedOn="{StaticResource ExpanderStyle}" TargetType="Expander">
            <Setter Property="Background" Value="#2fff0000"/>
        </Style>
    

    然后:

        <Grid>
    
        <Expander x:Name="expander1" Style="{DynamicResource ExpanderStyle}" Header="Expander" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="7,10,0,0" Height="108">
            <TextBlock Width="250" Height="150" TextWrapping="Wrap">
                asklsaklsa saaskklsaklas alsaklalkjd
                asklsaklsaklsa saklsaklsakl jsajkjska
                saklsaklsakl sasa
            </TextBlock>
        </Expander>
    
        <Expander x:Name="expander2" Style="{DynamicResource ExpanderStyleRed}" Header="Expander" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="12,126,0,0" Height="133">
            <TextBlock Width="250" Height="150" TextWrapping="Wrap">
                asklsaklsa saaskklsaklas alsaklalkjd
                asklsaklsaklsa saklsaklsakl jsajkjska
                saklsaklsakl sasa
            </TextBlock>
        </Expander>
    
    </Grid>
    

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 1970-01-01
      • 2013-05-06
      • 2011-05-28
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多