Windows.UI.Xaml.Controls.TreeView w/ Selection= "Multiple" ,复选框选中/未选择事件在哪里?



我正在使用Windows.UI.Xaml.Controls.TreeView与Windows.UI.Xaml.Controls.TreeViewItem with Selection="多个";。

<TreeView Name="DessertTree" SelectionMode="Multiple" ItemsSource="{x:Bind DataSource}" ItemInvoked="{x:Bind OnSelectionChanged, Mode=OneTime}">
<TreeView.ItemTemplate>
<DataTemplate x:DataType="local:Item">
<TreeViewItem ItemsSource="{x:Bind Children}" Content="{x:Bind Name}"/>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>

我似乎找不到为与TreeViewItem关联的复选框的状态更改而触发事件的方法。有人知道这方面的消息吗?我看到WPF中的TreeView有一个更改复选框状态的触发器,所以我认为同样的功能也是可用的。

我发现的唯一类似的触发器是ItemInvoked,但它不会在复选框上注册选择事件,只有在单击标签时才会注册。

您应该能够处理TreeViewItemTapped事件,在可视化树中找到CheckBox并检查其IsChecked属性:

private void OnTreeViewItemTapped(object sender, TappedRoutedEventArgs e)
{
TreeViewItem tvi = (TreeViewItem)sender;
CheckBox chk = FindVisualChild<CheckBox>(tvi);
bool? isChecked = chk.IsChecked;
}
private static T FindVisualChild<T>(DependencyObject visual) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(visual, i);
if (child != null)
{
T correctlyTyped = child as T;
if (correctlyTyped != null)
return correctlyTyped;
T descendent = FindVisualChild<T>(child);
if (descendent != null)
return descendent;
}
}
return null;
}

最新更新