C# WPF数据网格RowHeaderTemplate被RowHeaderStyle覆盖

C# WPF数据网格RowHeaderTemplate被RowHeaderStyle覆盖,c#,wpf,datagrid,C#,Wpf,Datagrid,我的WPF应用程序中有一个datagrid。我一直在尝试向datagridrowheader添加一个切换按钮,我已经成功地做到了这一点。我遇到的问题是尝试设置datagridrowheader的样式。如果我省略了-RowHeaderStyle=“{StaticResource DG_RowHeader}”行,我的按钮将正确加载。当我把这一行加回去时,我的按钮没有出现,这是为什么 就我所知,DG_RowHeader只是在设计行标题的样式?我想知道如何将此样式应用于我的datagridrowhead

我的WPF应用程序中有一个datagrid。我一直在尝试向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>

崩溃
看得见的

看起来您忘记了在
DG_行标题
样式中显示
DataGridRowHeader
的内容,更准确地说是在
DGRH_边框

您可以在其中添加ContentPresenter:

<Border x:Name="DGRH_Border"
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness}"
        SnapsToDevicePixels="True">
    [...]
   <ContentPresenter Content="{TemplateBinding Content}"
                     ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Border>
  • 通过删除
    x:Key
    属性,将样式设置为切换按钮的默认样式:


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

嗨,Franssu我已经添加了这一行,但似乎没有什么不同-仍然看不到切换按钮?我想我忘记了ContentTemplate=“{TemplateBinding ContentTemplate}”啊,切换按钮现在出现了,但是样式丢失了?@mHelpMe更新了我对您的切换按钮问题的答案。是的,我删除了x:Key属性,现在可以使用了,谢谢您的帮助。我的项目的下一部分是,只有部分行有切换按钮,而不是所有行-我现在将在另一个问题下发布另一个按钮。
   <Style TargetType="ToggleButton" x:Key="rowdetailToggleButton">