【问题标题】:WPF/Silverlight : Templating Custom Control PARTIALLYWPF/Silverlight:部分模板化自定义控件
【发布时间】:2011-05-18 08:47:49
【问题描述】:

.

大家好,

我们能否编写我们的自定义控件,以便稍后我们可以重新模板化它部分?意思是,在不替换整个 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。

感谢期待!

.

【问题讨论】:

    标签: wpf silverlight xaml custom-controls controltemplate


    【解决方案1】:

    我同意 Martin 关于 ControlTemplates 在 WPF 中几乎是全有或全无的说法的大部分内容,当我得出这个结论时,我自己非常沮丧。

    如果您编写自己的自定义控件,那么您可以更灵活地编写或提供对控件图片进行模板化的能力。例如,您可以查看更新的 WPF DataGrid 控件,该控件能够模板化控件的不同部分。其他带标题的内容控件通常具有单独的内容模板和控件的标题部分,因此可以替换其中一个而不是另一个。

    【讨论】:

    • 我认为它在可以完成的范围内回答了我的问题。既然做不到,就无法回答,所以我接受!
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多