WPF では、データグリッド行ヘッダーのトグル ボタンを使用して、各親データグリッド行の詳細な可視性を子データグリッドとして表示しています。トグル ボタンをクリックすると、対応する親データグリッド行の表示状態が「チェック済み」状態に変わります。正常に動作しています。しかし同時に、各トグルボタンをクリックせずに、他のすべての親データグリッド行の視覚状態を「未チェック」または「通常」として視覚状態にしたかったのです。次のコードを使用しています。しかし、それは正しく機能していません。しかし、各トグル ボタンをクリックすると、その表示状態が適切に変化しています。
private void ToggleButton_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).IsSelected = false;
(obj as DataGridRow).DetailsVisibility = System.Windows.Visibility.Collapsed;
}
else if ((obj as DataGridRow).DetailsVisibility == Visibility.Collapsed)
{
for (int i = 0; i < Data_Grid.Items.Count; i++)
{
DataGridRow itm = GetDataGridRowitem(i);
itm.IsSelected = false;
itm.DetailsVisibility = System.Windows.Visibility.Collapsed;
VisualStateManager.GoToElementState(itm, "Unchecked", true);
}
DataTemplate dt = FindResource("tocchild") as DataTemplate;
Data_Grid.RowDetailsTemplate = dt;
(obj as DataGridRow).IsSelected = true;
(obj as DataGridRow).DetailsVisibility = Visibility.Visible;
VisualStateManager.GoToElementState((obj as DataGridRow), "Checked", true);
}
}}
また、試してみましたが、
VisualStateManager.GoToState((obj as DataGridRow), "Checked", true);
お願い助けて。ありがとう。