wpf TreeView - 如何在 IsExpanded 属性更改上调用函数

标签 wpf treeview

当 TreeViewItem 属性 IsExpanded 更改时,XAML 中是否有方法调用函数?

我相信不太好的替代方案是循环遍历所有 TreeViewItems 并执行 item.IsExpanded += 处理程序调用(如果我理解正确的话)。

或者我可以检查我猜的扩展器元素上的点击情况。

我正在做的是保持树的展开/折叠状态。请回答第一个问题,然后再建议其他方法来坚持这一点,只是为了启发我了解属性和 xaml。

最佳答案

基于 Joel 的答案,您可以在 TreeViewItem Style 中使用 EventSetter 来引用代码隐藏中的事件处理程序:

<TreeView ... >
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem" >
            <EventSetter Event="TreeViewItem.Expanded" Handler="OnTreeExpanded" />
            <EventSetter Event="TreeViewItem.Collapsed" Handler="OnTreeCollapsed" />
        </Style>
    </TreeView.ItemContainerStyle>
    ...

代码隐藏 - 普通事件处理程序:

private void OnTreeExpanded(object sender, RoutedEventArgs e)
{
    var tvi = (TreeViewItem)sender;
    ...
    e.Handled = true;
}
private void OnTreeCollapsed(object sender, RoutedEventArgs e)
{
    var tvi = (TreeViewItem)sender;
    ...
    e.Handled = true;
}

注意:确保在事件处理程序中设置e.Handled = true,否则您也会从当前 TreeViewItem 的所有父项获取事件。

关于wpf TreeView - 如何在 IsExpanded 属性更改上调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973162/

相关文章:

wpf - 在 WPF 标签中自动剪辑和附加点

c# - 使用 WPF 的跨平台应用程序

c# - 关于显示启动画面图像的 WPF 问题

c# - TreeView 搜索

javascript - 在 HTML 中将 JSON/YAML 层次结构显示为树?

c# - WPF 数据绑定(bind)堆栈面板

c# - InvalidOperationException 未处理 - WPF 路径

python - 默认或以编程方式对 TreeView 中的列进行排序

c# - 如何选中或取消选中 TreeView 中的所有子节点

python - 如何获取选定 TreeView 项的值?