我有一个DataGrid,其RowDetails设置为在选中时显示(RowDetailsVisibilityMode ="VisibleWhenSelected").现在我希望能够摆脱它!我用这段代码在行细节上放了一个关闭按钮:
private void Button_Click(object sender, RoutedEventArgs e)
{
e.Handled = true;
Button button = sender as Button;
DataGridRow row = button.FindAncestor<DataGridRow>();
row.DetailsVisibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud)
该代码在那里得到了90%,但是一旦给定行的行细节折叠,下次选择该行时就不会出现.
Law*_*ley 13
我也遇到过这种情况.这是一个解决方案:
将该按钮保留在RowDetails中并稍微更改其代码.不要关注单个行的可见性,而是将DataGrid的SelectedIndex属性设置为-1(未选中).
DataGrid1.SelectedIndex = -1;
Run Code Online (Sandbox Code Playgroud)
由于您的RowDetailsVisibilityMode是VisibleWhenSelected
,DataGrid将折叠/隐藏任何展开的RowDetails.当SelectionMode为时,这很有效Single
.
小智 6
您可以使用XAML中的以下代码实现此目的:
<WpfToolkit:DataGrid Name="dgSysthetic" ItemsSource="{Binding}"
AutoGenerateColumns="True"
SelectionMode="Extended"
RowDetailsVisibilityMode="Collapsed"
CanUserAddRows="False" CanUserDeleteRows="False"
CanUserResizeRows="False" CanUserSortColumns="False"
RowHeaderWidth="20" RowHeight="25">
<WpfToolkit:DataGrid.RowHeaderTemplate>
<DataTemplate>
<Button Name="btnHideRow" Click="btnHideDetails_Click" FontSize="5">></Button>
</DataTemplate>
</WpfToolkit:DataGrid.RowHeaderTemplate>
<WpfToolkit:DataGrid.RowDetailsTemplate>
<DataTemplate>
<WpfToolkit:DataGrid Name="dgAnalytical" ItemsSource="{Binding}" AutoGenerateColumns="True"/>
</DataTemplate>
</WpfToolkit:DataGrid.RowDetailsTemplate>
</WpfToolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)
请参阅RowHeaderTemplate中的按钮.
在您的C#代码中,您将执行此操作:
private void btnHideDetails_Click(object sender, RoutedEventArgs e)
{
DependencyObject obj = (DependencyObject)e.OriginalSource;
while (!(obj is DataGridRow) && obj != null) obj = VisualTreeHelper.GetParent(obj);
if (obj is DataGridRow)
{
if ((obj as DataGridRow).DetailsVisibility == Visibility.Visible)
{
(obj as DataGridRow).DetailsVisibility = Visibility.Collapsed;
}
else
{
(obj as DataGridRow).DetailsVisibility = Visibility.Visible;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这对我很有用.