WPF Datagrid RowHeaderTemplate被RowHeaderStyle覆盖

mHelpMe

我的WPF应用程序中有一个数据网格。我一直在尝试向datagridrowheader添加一个切换按钮,这已经做到了。我遇到的问题是尝试设置datagridrowheader的样式。如果我省略该行-RowHeaderStyle =“ {StaticResource DG_RowHeader}”,则我的按钮将正确加载。当我将这条线添加回去时,我的按钮没有出现,为什么?

据我所知,DG_RowHeader只是在设置行标题的样式?我想知道如何将这种样式应用于datagridrowheader并同时显示切换按钮?

我的数据网格

<DataGrid DataContext="{Binding OrderBlock}" 
                  x:Name="dataGridOrders" 
                  ItemsSource="{Binding Orders}"
                  Style="{StaticResource DataGridTemplate}"
                  ColumnHeaderStyle="{StaticResource DG_ColumnHeader}"                                            
                  RowStyle="{StaticResource DG_Row}"
                  CellStyle="{StaticResource DG_Cell}"              
                  RowHeaderStyle="{StaticResource DG_RowHeader}"
                  RowDetailsTemplate="{StaticResource DG_RowDetail}"                      
                  AutoGenerateColumns="False"
                  HorizontalAlignment="Stretch" 
                  VerticalAlignment="Stretch"
                  Background="Silver"
                  RowHeaderWidth="30"                      
                  Margin="25,5,20,15"
                  RowDetailsVisibilityChanged="dataGridOrders_RowDetailsVisibilityChanged">
            <DataGrid.RowHeaderTemplate>                    
                <DataTemplate>
                    <ToggleButton x:Name="RowHeaderToggleButton"                                     
                                  Click="RowHeaderToggleButton_Click"
                                  Cursor="Hand"/>
                </DataTemplate>
            </DataGrid.RowHeaderTemplate>

我的DataGridRowHeader

<!-- Data Grid row with toggle button -->
    <Style x:Key="DG_RowHeader" TargetType="{x:Type DataGridRowHeader}">
        <Setter Property="Width" Value="35"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
                    <Border x:Name="DGRH_Border"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                SnapsToDevicePixels="True">
                        <Border.Background>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                                <GradientStop Offset="0" Color="LightGray"/>
                                <GradientStop Offset="1" Color="WhiteSmoke"/>
                            </LinearGradientBrush>
                        </Border.Background>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我的切换按钮

<!-- Toogle Button -->
    <Style TargetType="ToggleButton" x:Name="rowdetailToggleButton">
        <Setter Property="Padding" Value="0" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ToggleButton">
                    <Grid>                             
                        <Path x:Name="DefaultPath"
                          VerticalAlignment="Top"
                          Data="M0,0 14,7 0,14 Z"
                          Fill="DarkGray"
                          Stretch="Fill"
                          Margin="6"/>
                        <Path x:Name="CheckedPath"
                          VerticalAlignment="Top"
                          Data="M0,0 14,0 7,14 Z"
                          Fill="DarkGray"
                          Stretch="Fill"
                          Margin="6"
                          Visibility="Collapsed" />
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CheckStates">
                                <VisualState x:Name="Checked">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Duration="0" 
                                                                       Storyboard.TargetName="DefaultPath"
                                                                       Storyboard.TargetProperty="Visibility">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <Visibility>Collapsed</Visibility>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Duration="0" 
                                                                       Storyboard.TargetName="CheckedPath"
                                                                       Storyboard.TargetProperty="Visibility">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <Visibility>Visible</Visibility>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="CheckedPath" Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)">
                                            <SplineColorKeyFrame KeyTime="0:0:0.2" Value="LightGray" />
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Unchecked" />
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
弗兰苏

它看起来像你忘了要显示的内容DataGridRowHeaderDG_RowHeader风格,更精确地里DGRH_Border

您可以在其中添加ContentPresenter:

<Border x:Name="DGRH_Border"
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness}"
        SnapsToDevicePixels="True">
    [...]
   <ContentPresenter Content="{TemplateBinding Content}"
                     ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Border>

至于ToggleButtons,您需要:

  • ToggleButton的声明中指定样式

(假设您的样式是使用x:Key属性定义的x:Name而是您指定的)):

   <Style TargetType="ToggleButton" x:Key="rowdetailToggleButton">
  • 通过删除x:Key属性,将样式设置为切换按钮的默认样式

无论哪种方式,您都需要确保资源的字典在声明按钮的位置可用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章