我有一个WPF应用程序,其中包含一个显示订单列表的数据网格。每个订单都有一个ID,但它可能有超过1个ID(由于某种原因我无法控制)。
所以我使用rowdetails在嵌套的数据网格中显示ID列表。
我希望实现两件事。
1)如果用户点击一行,它会自动展开并显示行详细信息&除非你点击另一行,否则无法折叠它。所以我想在rowheader中有一个按钮来搜索行详细信息的可见性,这样如果用户点击该行,则不会显示行详细信息。我只希望行详细信息显示是否单击了行标题中的按钮。
2)不是那么重要但如果它很容易实现,那么只有行ID超过1的行在行标题中才有一个按钮。
这是我的数据网格代码
<!-- The data grid to display orders-->
<DataGrid DataContext="{Binding OrderBlock}" x:Name="dataGridOrders"
ItemsSource="{Binding Orders}"
Style="{StaticResource DataGridTemplate}"
ColumnHeaderStyle="{StaticResource DG_ColumnHeader}"
RowHeaderStyle="{StaticResource DG_RowHeader}"
RowStyle="{StaticResource DG_Row}"
CellStyle="{StaticResource DG_Cell}"
RowDetailsTemplate="{StaticResource DG_RowDetail}"
AutoGenerateColumns="False"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Silver"
RowHeaderWidth="30"
Margin="25,5,20,15">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<ToggleButton x:Name="RowHeaderToggleButton"
Cursor="Hand"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
在我的App.xaml中我做了样式,我有这个,
<!-- Data Grid row header template -->
<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">
<Setter Property="Padding" Value="3" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid>
<ContentPresenter x:Name="contentPresenter"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
<Path x:Name="DefaultPath"
VerticalAlignment="Top"
Data="M0,0 14,7 0,14 Z"
Fill="Gray"
Stretch="Fill" />
<Path x:Name="CheckedPath"
VerticalAlignment="Top"
Data="M0,0 14,0 7,14 Z"
Fill="LightGray"
Stretch="Fill"
Visibility="Collapsed" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:0)
创建样式,然后设置DataGrids行标题样式
RowHeaderStyle="{DynamicResource SelectionRowHeaderStyle}"
请参阅此帖,其中显示了如何添加文本切换按钮: WPF Datagrid add button to datarowheader
这个展示了如何创建一个可以在这里应用的图像切换: ToggleButton changing image depending on state