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