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

gcuhipw9  于 2023-08-01  发布在  Windows
关注(0)|答案(1)|浏览(120)

我正在使用Windows.UI.Xaml.Controls.TreeView沿着带有Selection=“Multiple”的Windows.UI.Xaml.Controls.TreeViewItem。

<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,但它不注册复选框上的选择事件,只有在单击标签时才注册。

rxztt3cl

rxztt3cl1#

您应该能够处理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;
}

字符串

相关问题