簡體   English   中英

資源字典中的wpf datagrid rowheader擴展器togglebuttton樣式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM