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

时间:2010-12-01 08:13:48

标签: wpf silverlight xaml custom-controls 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。

感谢您的期待!

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

你的xaml标记会更清晰,看起来像这样:

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

答案 2 :(得分:1)

我同意马丁所说的大部分关于ControlTemplates在WPF中几乎全有或全无的事情,当我得出这个结论时,我自己很沮丧。

如果您编写自己的自定义控件,则可以使其更灵活,以便编写或提供模板控件的模板。例如,您可以查看较新的WPF DataGrid控件,该控件可以模拟控件的不同部分。其他带有标题的内容控件通常有一个单独的内容模板和控件的标题部分,可以替换一个而不是另一个。