【问题标题】:ItemTemplate DesignTime hints for custom control自定义控件的 ItemTemplate DesignTime 提示
【发布时间】:2015-03-24 14:19:26
【问题描述】:

我想使用 ItemsSource 创建自定义控件,其中 ItemTemplate 用于这些项目。

我已经让它工作了,但还剩下一件事:

我想要在 DataTemplate 中绑定 DesignTime 助手。现在我可以从 Collection 对象中绑定属性,但是在 XAML 中没有像其他绑定那样的提示。

当然我可以这样做:

<DataTemplate>
    <StackPanel d:DataContext="{d:DesignInstance models:User}">
        <Label Content="{Binding FirstName}" />
        <Label Content="{Binding LastName}" />
    </StackPanel>
</DataTemplate>

但我想避免手动输入 DesignTime 实例。

有没有办法做到这一点?

【问题讨论】:

  • 在 DataTemplate 元素上设置 DataType 属性

标签: c# wpf


【解决方案1】:
<DataTemplate DataType={x:Type User}>

通过告诉 DataTemplate 它所代表的类型; Intellisense 将为您提供有关可用于 Binding 表达式的属性的 DesignTime 提示

【讨论】:

  • 是的,我知道,但是如果您以 ListBox 为例:它是以 soma 自动方式完成的。 Datatemplate默认知道Collection Item的类型,所以如果你为ListBox创建DataTemplate,它会自动知道item的Properties。
  • 您的自定义控件是否扩展了 ItemsControl? ItemsControl 定义了 ItemsSource 和 ItemTemplate,如果您从该类扩展,则智能感知应该采用与 ListBox 相同的方式绑定到 ItemsSource 的类的类型。
  • 谢谢,有帮助。但是如果我想添加第二个 ItemTemplate 怎么办?例如我的控件内的 ListBox 和 TextBox 的 ItemTemplate?将 ItemsControl 添加为父类型只是处理该问题的一种技巧......
  • 我怀疑这个逻辑是内置在 XAML 设计器中的 - 如果您想要第二个项目模板,我认为定义 DataType 将是处理您的问题的最佳方式。如果您不希望您的控件的用户必须在 XAML 中应用该数据类型,您可以尝试从自定义控件中的依赖属性的 setter 回调中自动应用该数据类型。即当有人设置 ItemsSource 属性时,反射性地获取要绑定的集合的项目类型,然后以编程方式基于该类型设置 datatemplate.datatype。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多