[英]wpf datagrid rowheader expander togglebuttton style from resource dictionary
我有一個帶有RowDetails的WPF DataGrid,它使用RowHeader Expander擴展/折疊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.Normal 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.