我正在为 WPF 创建一些自定义用户控件。此用户控件包含自定义依赖属性,因此我可以将它们填充到设计器中。
其中一个属性称为“InnerUserControlType”。此依赖属性是一个自定义枚举,包含一些值,如 TextBox、ComboBox、Label、CheckBox 等。
我希望能够在设计器的 XAML 页面中设置此属性,然后看到用户控件根据属性更改显示的内部控件。
我应该如何实现?在我的用户控件中将包含内部控件的网格是一个普通字段,因此不能从静态方法属性(如依赖属性)访问它。
我希望它能在设计器中运行,以便设计器可以轻松工作。
非常感谢!
最佳答案
在网格中放置一个ContentControl
,通过相关源将Content
属性绑定(bind)到UserControl
<ContentControl Content="{Binding RelativeSource={RelativeSource FindAnsector,
AncestorType={x:Tyle myNamespace:MyControl}}}"
并制作一个 DataTemplateSelector
,它将检查 InnerUserControlType
的值,并返回一个适当的数据模板,其中包含属性中要求的控件。
根据您的情况,您可能需要确保数据模板中的控件具有正确的数据上下文。如果控件的数据上下文应与用户控件的相同,则在数据模板的根元素上,为数据上下文添加相对绑定(bind)。类似于(对于文本框数据模板):
<TextBox DataContext="{Binding DataContext,
RelativeSource={RelativeSource FindAnsector,
AncestorType={x:Tyle myNamespace:MyControl}}}"
......
</TextBox>
编辑:
我只注意到了 wpf 标签而错过了 silverlight 标签。
在 Silverlight 中,您没有 ...TemplateSelector
属性,因此请改用转换器。
关于c# - 在设计时通过属性更改 Silverlight/WPF 中的内部用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699353/