【问题标题】:Setting a style's TargetType property to a generic class将样式的 TargetType 属性设置为泛型类
【发布时间】:2010-11-03 05:20:54
【问题描述】:

是否可以将 XAML 中样式的 TargetType 属性设置为通用类?

public class Selector<T> : Control { }

然后在 xaml 中

<Style x:TargetType="Selector">
<Setter Property="MyProperty" Value="Green" />
</Style>

这不起作用,因为 Selector 缺少类型参数。

【问题讨论】:

    标签: c# wpf xaml targettype


    【解决方案1】:

    您不能绑定到像List&lt;T&gt; 这样的开放泛型类型,但是可以通过定义占位符类型绑定到像List&lt;Person&gt; 这样的封闭泛型类型。

    C#

    class People : List<Person> {}
    

    XAML

    <Style TargetType="{x:Type People}"> ... </Style>
    

    更新:您需要为样式指定TargetTypex:Key 属性,而不是两者。

    【讨论】:

    • 对于类似的 xaml+generics 情况,我偶然发现了这个解决方案。每个泛型我已经有 10 个封闭类型,我希望不需要复制样式信息。
    • 是的...afaik XAML 还没有直接掌握泛型...
    【解决方案2】:

    泛型在 XAML 中的支持非常有限。话虽如此,Mike Hillberg 有一篇非常有趣的帖子 here 关于自定义标记扩展可能会有所帮助。

    【讨论】:

      【解决方案3】:

      我认为您使用的是常规 WPF,而不是 Silverlight?如果我没记错的话,你可以这样说:

      <Style TargetType="{x:Type Control}" x:Key="{x:Type Control}">
      </Style>
      

      【讨论】:

      • 是的,它的 WPF,但我需要将它连接到一个泛型类 - 我会更新问题以使其更清楚。
      猜你喜欢
      • 2015-02-20
      • 2020-08-06
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多