WPF DataGrid Rowheader Expander toggleButtton从资源词典样式



我有一个带有rowdetails的wpf datagrid,它使用Rowheader扩展器扩展/折叠了rowdetails。我正在尝试将Rowheader Expander toggleButton的样式设置为资源词典中定义的toggleButton样式。我尝试了:

<DataGrid.RowHeaderTemplate>
<DataTemplate>
    <Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed" >
        <Style TargetType="ToggleButton" BasedOn="{StaticResource ExpandCollapseToggleStyle}" />
    </Expander>
</DataTemplate>

此编译,但不会更改togglebutton的样式。

这并不是那么容易。如果您将Expander强加于RowHeaderTemplate,则需要对实际的Expander对象进行样式,以便对埋在其中的ToggleButton产生影响。

下面给出的是aero.Sormal wpf主题中Expander对象的默认样式。然后,您可以修改包含的ToggleButton

<Style x:Key="{x:Type Expander}"
       TargetType="{x:Type Expander}">
    <Setter Property="Foreground"
            Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="Background"
            Value="Transparent"/>
    <Setter Property="HorizontalContentAlignment"
            Value="Stretch"/>
    <Setter Property="VerticalContentAlignment"
            Value="Stretch"/>
    <Setter Property="BorderBrush"
            Value="Transparent"/>
    <Setter Property="BorderThickness"
            Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Expander}">
                <Border BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        CornerRadius="3"
                        SnapsToDevicePixels="true">
                    <DockPanel>
                        <ToggleButton x:Name="HeaderSite"
                                      DockPanel.Dock="Top"
                                      Margin="1"
                                      MinWidth="0"
                                      MinHeight="0"
                                      Style="{StaticResource ExpanderDownHeaderStyle}"
                                      FocusVisualStyle="{StaticResource ExpanderHeaderFocusVisual}"
                                      IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
                                      Content="{TemplateBinding Header}"
                                      ContentTemplate="{TemplateBinding HeaderTemplate}"
                                      ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}"
                                      Foreground="{TemplateBinding Foreground}"
                                      Padding="{TemplateBinding Padding}"
                                      FontFamily="{TemplateBinding FontFamily}"
                                      FontSize="{TemplateBinding FontSize}"
                                      FontStyle="{TemplateBinding FontStyle}"
                                      FontStretch="{TemplateBinding FontStretch}"
                                      FontWeight="{TemplateBinding FontWeight}"
                                      HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        <ContentPresenter x:Name="ExpandSite"
                                          DockPanel.Dock="Bottom"
                                          Visibility="Collapsed"
                                          Focusable="false"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          Margin="{TemplateBinding Padding}"/>
                    </DockPanel>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsExpanded"
                             Value="true">
                        <Setter Property="Visibility"
                                Value="Visible"
                                TargetName="ExpandSite"/>
                    </Trigger>
                    <Trigger Property="ExpandDirection"
                             Value="Right">
                        <Setter Property="DockPanel.Dock"
                                Value="Right"
                                TargetName="ExpandSite"/>
                        <Setter Property="DockPanel.Dock"
                                Value="Left"
                                TargetName="HeaderSite"/>
                        <Setter Property="Style"
                                Value="{StaticResource ExpanderRightHeaderStyle}"
                                TargetName="HeaderSite"/>
                    </Trigger>
                    <Trigger Property="ExpandDirection"
                             Value="Up">
                        <Setter Property="DockPanel.Dock"
                                Value="Top"
                                TargetName="ExpandSite"/>
                        <Setter Property="DockPanel.Dock"
                                Value="Bottom"
                                TargetName="HeaderSite"/>
                        <Setter Property="Style"
                                Value="{StaticResource ExpanderUpHeaderStyle}"
                                TargetName="HeaderSite"/>
                    </Trigger>
                    <Trigger Property="ExpandDirection"
                             Value="Left">
                        <Setter Property="DockPanel.Dock"
                                Value="Left"
                                TargetName="ExpandSite"/>
                        <Setter Property="DockPanel.Dock"
                                Value="Right"
                                TargetName="HeaderSite"/>
                        <Setter Property="Style"
                                Value="{StaticResource ExpanderLeftHeaderStyle}"
                                TargetName="HeaderSite"/>
                    </Trigger>
                    <Trigger Property="IsEnabled"
                             Value="false">
                        <Setter Property="Foreground"
                                Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

最新更新