如何使用纯WPF(没有代码隐藏)在WPF Style中创建“自定义属性”?

时间:2011-07-25 15:06:50

标签: wpf xaml styles dependency-properties

民间

我正在一个项目的UI设计中工作,我们的团队选择尽可能地分离C#和XAML。

我一直无法为许多常见的小部件(按钮等)和一些UserControls创建样式,特别是因为我不想/不知道如何/不应该使用代码隐藏。

我想要做的是能够更改“深入”UserControls布局树中元素的属性。

例如,假设我有一个UserControl是一个Border,它包含一个StackPanel,它包含一个彩色椭圆和其他东西。

我希望能够实例化此用户控件并仅更改椭圆的颜色,如下所示:

<MyUserControl Background="Gray" EllipseColor="LightGreen" />

其中“EllipseColor”将是UserControl中定义的一些“自定义”属性。

我在样式中尝试DependencyProperty,但没有成功,虽然我“觉得”必须有一个简单的方法来做到这一点。

任何帮助(链接,代码片段)都会受到欢迎。

感谢阅读。

1 个答案:

答案 0 :(得分:4)

MVVM中的“No Code Behind”规则用于保持View和ViewModel完全分离,不应用于特定于视图的代码,例如DependencyProperties。它就像是说“用这些方块建造一座房子,但我想要一个圆形的屋顶,你不能创造自己的积木”。 DependencyProperties的重点是为您尚未存在的视图创建其他属性。

重要的一点是View不直接引用ViewModel,反之亦然。

在你的情况下,我会在你的UserControl for EllipseColor的Code Behind中创建一个DependencyProperty,或者使用类似UserControl的Background属性并将我的Ellipse填充颜色绑定到那个。