【发布时间】:2011-01-25 04:02:44
【问题描述】:
我继承的 WPF 应用程序包含大量 XAML,其遵循如下模式:
<Window ...>
<Grid>
<z:SomeUserControl>
<z:AnotherUc>
<Label /> <Button /> <ComboBox />
</z:AnotherUc>
<z:AnotherUc>
<Label /> <Button /> <ComboBox />
</z:AnotherUc>
</z:SomeUserControl>
</Grid>
</Window>
换句话说,我们有按 UserControl 分组的 UI 部分,通常嵌套在其他 UserControl 中。在某些时候,内容是使用基本的 WPF 内容控件定义的。
我们试图解决的问题是,由于臭名昭著的 WPF 限制,x:Name 属性不能应用于任何最内部的控件:
这带来了一个问题,因为代码隐藏需要能够引用 UserControls 中的元素。之所以选择 UserControls 来对 UI 的各个部分进行分组,是因为默认控件的所有样式和模板都过于笨拙,并且标记很快就变成了可怕的、难以理解的混乱。
但是,如果微软无意解决这个所谓的“限制”,则必须找到更好的方法。已考虑使用 CS + 外部 XAML 模板文件,如连接站点上GaryGJohnson 的解决方法中所见。然而,这有一种 sphagetti 的感觉,任何打断绑定的东西都是不行的。
【问题讨论】:
-
我遇到了类似的问题,我使用了 CustomControl 项。但现在我知道一切都可以使用 MVVM 和行为来完成。所以我尽量避免使用 x:Name 属性。
标签: wpf xaml user-controls