1
0
不如把它移到ViewModel而不是XAML中,因为在我看来这是一种行为。 在我看来,你想要的行为-每个插件注册一堆属性(映射到UI控件)为高级。有一个全局设置可打开/关闭高级属性。发生这种情况时,更新所有插件以显示/隐藏其高级属性 让插件编写器实现一个只包含set属性AreAdvancedControlsVisible的接口。让他们通过属性更改处理程序在UI中隐藏/显示控件。高级UI控件可以绑定到pluginVM上的ShowAdvancedControls标志,该标志从prop changed处理程序切换为on/off。 只要设置了ShowAdvanced复选框,框架就可以循环使用可用的插件并设置这个标志。 |
2
0
也许有很多更好的方法来解决这个问题,但是我试图解决你的解决方案中的两个问题。有这个的小样本项目可以下载 here .
添加一个附加属性(使所有子级都继承该值)到最上面的容器可以解决此问题。
Bea Stollnitz有一篇很好的关于合并样式的博客文章
here
.
听起来很直截了当,但是下面的问题使代码更加复杂。
因此,我们希望此样式与父容器中所有子级的活动样式合并。
如果根容器是StackPanel,那么我们添加这个。样式IsAdvancedStyle将由所有子级继承并与活动样式合并。
stylechildsbehavio.cs样式
在此之后,IsAdvancedStyle将合并到StackPanel的所有子级中,这也适用于在运行时添加的子级。 从博客链接修改合并扩展方法。
|
3
0
我决定把这个问题颠倒一下,结果很好。
我没有处理样式,而是按照
Gishu
. 但是,我没有将UI放在VM中(在VM中,属性将手动传播多个层),而是使用了一个名为
创建此属性很简单:
复选框设置
根据
抛弃样式允许插件编写器在需要时完全更改控件的布局。它们还可以显示高级控件,但如果需要,可以保持禁用状态。风格带来了很多问题,正如梅勒克所说 workarounds were messy . 在VM中放置“高级”显示逻辑的主要问题是,现在不太可能将多个视图绑定到同一个VM,同时保持所需的灵活性。如果“高级”逻辑在VM中,则必须显示高级控件 全部的 视图或 不 视图;不能一个显示,另一个隐藏。这,IMO,首先打破了VM的原则。 (感谢所有在这里发帖的人,这很有帮助!) |
user180708 · 将日期转换为英文日期 6 年前 |
Anthony Smyth · 如何更改禁用WPF按钮的按钮样式? 6 年前 |
Donat · 在XAML中绑定单例(UWP) 6 年前 |
Amibluesky · 扩展/减少文本块WPF/Xaml中的符号 6 年前 |
smoore4 · 访问代码隐藏中的XAML绑定 6 年前 |