WPF控件模板化 - 如何创建自定义属性?

4
我正在使用Blend构建XAML UserControl库。
我已经为自定义的WPF滑块类型创建了一个模板。现在我想为控件添加自定义画笔属性,以便在设计应用程序界面时轻松自定义(我的滑块设计具有背景颜色、前景颜色和缩略图颜色)。这是可能的吗?如果可以,它会出现在Blend界面中吗?
我知道我可以创建一堆样式,但这似乎对于仅更改单个颜色来说有些过度。

你是否正在寻找自定义依赖属性。http://msdn.microsoft.com/en-us/library/ms753358.aspx。 - Jatin
1个回答

4
在您的UserControl的代码后台中,为您希望在模板中使用的笔刷定义依赖属性。
public static readonly DependencyProperty ThumbnailBrushProperty =
            DependencyProperty.Register("Command", typeof (Brush), typeof (YourControl), new PropertyMetadata(default(Brush)));

此属性将出现在VS设计器和Blend的“杂项”部分。

如果我理解正确,您已为自定义滑块控件创建了ControlTemplate。如果是这样,您可以通过模板绑定将该属性从模板内部绑定到它:

更新

好的,所以您正在为标准滑块控件创建模板。您有考虑过将您用作ThumbnailBrush等的刷子定义为资源,在保存滑块模板的资源字典中引用此资源字典,然后仅从模板中使用它们吗?在Blend中,您将能够在“资源”选项卡中对其进行修改。


谢谢Marc。目前我的控件在一个XAML文件的ResourceDictionary中定义,并没有附带.cs文件。我是否需要手动创建一个? - pixsperdavid
你的意思是为标准滑块控件定义了一个自定义控件模板?那么实际上并没有真正的自定义控件? - Marc
是的,它是标准控件的模板版本。如果这不够清楚,我很抱歉。 - pixsperdavid
好的,没问题。那我建议从滑块派生一个控件并在那里定义属性。这是最简单的方法。或者,你可以使用附加属性,但在你的情况下我没有看到任何主要区别。但也许,你应该走另一条路,只需定义你用作资源的画笔,并使用静态资源绑定绑定到它们...我会更新我的答案... - Marc
谢谢,我会研究子类化滑块,因为它似乎是一个更简洁的解决方案。我从QML的知识出发,创建一个自定义属性的UI控件要容易得多... - pixsperdavid
真的,这并不容易,就像使用WPF一样... 有一个小技巧可以让它变得更容易。如果你开始输入“depend...”,Visual Studio会在智能感知中提供一个快捷方式来创建笨拙的依赖属性注册。 - Marc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接