WPF/Silverlight:自定义控件部分模板化

6

大家好,

我们能否以这样的方式编写自定义控件,以便稍后可以部分地重新模板化它?也就是说,在不替换整个ControlTemplate的情况下,我们想要更改/覆盖一些外观和感觉?

当然,一种方法是:从generic.xaml复制ControlTemplate代码,部分修改其外观和感觉,并在您的xaml中使用它,如下所示:

<MyCustomControl>
       <MyCustomControl.Template>
              <ControlTemplate>

                    <!-- paste the copied and modified code from generic.xaml here-->

              </ControlTemplate>
        </MyCustomControl.Template>

        <!--other code-->

</MyCustomControl>

但是这种方法的问题在于,我们使我们的xaml过于冗长。我真的不喜欢它。我正在寻找一些解决方案,可以避免在使用我的自定义控件的地方污染xaml。
谢谢您的期待!
3个回答

1

不幸的是,修改控件模板是一个全盘接受的提议。正如您所指出的那样,当您修改复杂的控件模板时,您的XAML变得非常冗长。

一种方法(这也是相当明显的)是从小的可组合部分构建您的UI,希望使控件模板更易于使用。

您可以使用Style.BasedOn Property重用样式,但不幸的是,这并不能解决您的问题。


1

我同意Martin关于在WPF中ControlTemplates几乎是全然或无事的说法,当我得出这个结论时,我自己也感到非常沮丧。

但是,如果你正在编写自己的自定义控件,可以通过组成或提供模板化部分的能力使其更加灵活。例如,您可以查看较新的WPF DataGrid控件,它具有为控件的不同部分提供模板的功能。其他带标题内容控件通常具有用于内容和标题部分的单独模板,从而可以更换其中一个,而不是两者都更换。


我认为它已经回答了我的问题,至少在能够回答的范围内。既然不能做到的事情也无法回答,所以我接受了它! - Nawaz

1

我也面临着同样的问题,即进行一次小修改需要复制和粘贴整个默认控件模板。

不过,你可以定义多个资源字典,并使用<ResourceDictionary.MergedDictionaries>来将你的标记与控件模板分开。

你的XAML标记将更加清晰,类似于这样:

 <Style>
        <Setter Property="Template" Value="{StaticResource SomeRandomTemplate}" />
 </Style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接