民间
我正在一个项目的UI设计中工作,我们的团队选择尽可能地分离C#和XAML。
我一直无法为许多常见的小部件(按钮等)和一些UserControls创建样式,特别是因为我不想/不知道如何/不应该使用代码隐藏。
我想要做的是能够更改“深入”UserControls布局树中元素的属性。
例如,假设我有一个UserControl是一个Border,它包含一个StackPanel,它包含一个彩色椭圆和其他东西。
我希望能够实例化此用户控件并仅更改椭圆的颜色,如下所示:
<MyUserControl Background="Gray" EllipseColor="LightGreen" />
其中“EllipseColor”将是UserControl中定义的一些“自定义”属性。
我在样式中尝试DependencyProperty
,但没有成功,虽然我“觉得”必须有一个简单的方法来做到这一点。
任何帮助(链接,代码片段)都会受到欢迎。
感谢阅读。
答案 0 :(得分:4)
MVVM中的“No Code Behind”规则用于保持View和ViewModel完全分离,不应用于特定于视图的代码,例如DependencyProperties。它就像是说“用这些方块建造一座房子,但我想要一个圆形的屋顶,你不能创造自己的积木”。 DependencyProperties的重点是为您尚未存在的视图创建其他属性。
重要的一点是View不直接引用ViewModel,反之亦然。
在你的情况下,我会在你的UserControl for EllipseColor的Code Behind中创建一个DependencyProperty,或者使用类似UserControl的Background
属性并将我的Ellipse填充颜色绑定到那个。