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

WPF/Silverlight:部分模板化自定义控件,wpf,silverlight,xaml,custom-controls,controltemplate,Wpf,Silverlight,Xaml,Custom Controls,Controltemplate,大家好 我们能否以这样的方式编写自定义控件,以便以后可以对其部分重新设置模板?意思是说,在不替换整个ControlTemplate的情况下,我们想更改/覆盖它的一些外观 当然,一种方法是:从generic.xaml复制ControlTemplate代码,部分修改其外观,并在xaml中使用它,如下所示: <MyCustomControl> <MyCustomControl.Template> <ControlTemplate&

大家好

我们能否以这样的方式编写自定义控件,以便以后可以对其部分重新设置模板?意思是说,在不替换整个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

期待中的感谢


.

不幸的是,修改控件模板是一个全有或全无的命题。正如您所指出的,当您修改复杂的控件模板时,XAML变得非常冗长

一种方法(无论如何都很明显)是从小的可组合部分构建UI,希望使控件模板更易于使用


通过使用,您可以重用样式。不幸的是,这并不能解决您的问题。

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

但是,您可以定义多个资源字典,并使用
将标记与控件模板分开

您的xaml标记将更加清晰,看起来如下所示:

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

我同意Martin关于ControlTemplates在WPF中几乎是全有或全无的说法,当我得出这个结论时,我自己也很沮丧


但是,如果您编写自己的自定义控件,您可以使其更加灵活,为什么要编写或提供控件图片模板的功能。例如,您可以查看较新的WPF DataGrid控件,该控件能够对控件的不同部分进行模板化。其他标题内容控件的内容和标题部分通常有一个单独的模板,可以替换其中一个,但不能替换另一个。

我认为它在一定程度上回答了我的问题。既然做不到,也回答不了,我就接受它!