c# - 在设计时通过属性更改 Silverlight/WPF 中的内部用户控件

标签 c# wpf silverlight xaml user-controls

我正在为 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/

相关文章:

c# - Silverlight Xaml 中的 ComboBox IsEnabled 绑定(bind)问题

silverlight - 当 uielements 有边距时 ScrollViewer 不起作用

c# - 如何重置字典

c# - 如何使用 NPOI 读取包含空单元格的 Excel 电子表格?

c# - 如何判断 Image.FromStream 是否完成

wpf - 如何在wpf中编辑数据网格中的选择行

c# - 添加 x :Name to a user control gives error in generated code of page its used in

C# 和 SendMessage(键)不工作

c# - 双显示器父子窗口问题

wpf - DateTime 未在 Datagrid、ListView 中以当前区域性格式显示