Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在视觉树上行走是不好的做法吗?_.net_Wpf_Visual Tree - Fatal编程技术网

.net 在视觉树上行走是不好的做法吗?

.net 在视觉树上行走是不好的做法吗?,.net,wpf,visual-tree,.net,Wpf,Visual Tree,最近我看到了一些关于在可视化树上行走是不好的做法()的评论,但我还没有看到或找到为什么这会是不好的做法的原因 在我正在进行的一个项目中,有相当多的树木行走,所以我想知道我是否应该费心把这一切都改成其他的东西,或者就让它保持原样 所以,我想我这里的主要问题是,如果视觉树木行走真的是一种糟糕的做法,更重要的是,如果是,为什么 另外,在哪里(如果有的话?)可以在视觉树上行走 遍历可视化树通常相当于打破WPF“自然”机制提供的抽象,手动强制执行框架本身应该做的事情(通过XAML声明、数据绑定等)。简单地

最近我看到了一些关于在可视化树上行走是不好的做法()的评论,但我还没有看到或找到为什么这会是不好的做法的原因

在我正在进行的一个项目中,有相当多的树木行走,所以我想知道我是否应该费心把这一切都改成其他的东西,或者就让它保持原样

所以,我想我这里的主要问题是,如果视觉树木行走真的是一种糟糕的做法,更重要的是,如果是,为什么

另外,在哪里(如果有的话?)可以在视觉树上行走

  • 遍历可视化树通常相当于打破WPF“自然”机制提供的抽象,手动强制执行框架本身应该做的事情(通过XAML声明、数据绑定等)。简单地说,这是一种黑客行为。有时这表明人们不确定如何正确使用WPF。(顺便说一句,这确实很难使用)

  • 您无法始终真正知道可视化树是否完整;WPF可能尚未生成所有控件(例如,在用许多项填充列表时)。为了解决这个问题,您需要实施保护措施,处理
    LayoutUpdated
    事件等,这使得代码过于复杂


  • 我想说的是,首先,你会在这个问题上得到各种各样的意见

    在您链接到的示例中,我想说,在这种情况下,可视化树漫游是错误的解决方案-WPF通常最好与某种MVVM或类似MVP的模式一起使用,这意味着数据绑定,如果您绑定到适当的结构,您就可以消除许多可能使用可视化树漫游所做的事情

    事实上,我只是倾向于用它来做“特效”。我使用的大型内部WPF应用程序有一些可视化的树行走代码,它以可重用的方式为一些
    ItemControl
    s添加了一些方便的行为(使用类型参数使其工作非常有趣)

    我们还将在一些附加属性的实现中遍历可视化树,这些附加属性是控制是否允许特定用户操作UI某些部分的系统的一部分。这是因为无论底层数据是什么,该系统都必须转换可视树-用户权限是一个贯穿各领域的问题,底层数据不必在每一步都担心这一问题


    基本上,我们这样做只是为了对UI本身做一些事情——UI行为不能用更方便的方式来做(老实说,大多数情况下,大多数其他方式都更方便),或者根据UI绑定到的数据中不方便表达的某个因素来调整可视化树。如果是关于操作数据的,我们总是在后端数据结构或视图模型中进行操作。

    这取决于您为什么要遍历可视化树。有许多机制可以自动化您的视图,在大多数情况下,它们甚至足以执行非常复杂的控制

    在我多年的wpf工作中,我只在创建一些非标准行为时才使用视觉树行走,而这些行为是其他方法无法做到的(或者我没有找到其他方法来实现它们)。我认为行走视觉树是一种工具,比如任何其他的反射。了解它是件好事,它有它的应用和缺点