WPF:创建自定义控件而不重写ControlTemplate

时间:2011-02-25 08:19:41

标签: wpf templates custom-controls

嘿,我正在创建一个继承自ListView的自定义控件WPF。但是,我希望它看起来与现有的ListView完全相同。

有没有办法在自定义控件中使用默认的ListView模板而不在xaml中重写?我有一个添加了新控件的Generic.xaml文件,但我不需要重写模板代码。

谢谢

编辑:我也希望尽可能保持DRY而不重复(弄乱)代码。

2 个答案:

答案 0 :(得分:4)

如果您继承ListView,那么您的子类控件将使用ListView模板。而已!你不需要做任何事情!

控件使用的模板由其DefaultStyleKey依赖项属性定义。如果要更改控件的模板,请按如下所示设置此属性:

  DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl),
    new FrameworkPropertyMetadata(typeof(MyControl)));

但是,如果不设置此属性,它将使用超类设置的值。

我认为问题在于您使用了“添加新项目”=> “自定义控件”创建您的控件然后更改它扩展的类。而不是这样做,只需添加一个新的C#类并扩展ListView。

答案 1 :(得分:1)

<Style TargetType="{x:Type local:MyControl}" BasedOn={StaticResource {x:Type ListView}}" />