WPF可选的TemplateBinding属性

时间:2013-10-31 17:24:12

标签: wpf optional templatebinding

基本上我想做的是FontSize是可选的,这意味着应该有一个默认值。请协助。

<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type Control}">
    <TextBlock 
           HorizontalAlignment="Left"
           VerticalAlignment="Center"
           MaxWidth="136"
           MaxHeight="55"
           FontSize="{TemplateBinding FontSize}"
           TextWrapping="Wrap"
           />
</ControlTemplate>

1 个答案:

答案 0 :(得分:1)

  

将FontSize设为可选,这意味着应该有一个默认值

这似乎是对TemplateBinding的误解。 TemplateBinding是一种在控件模板中使用的特殊绑定,其中源是模板所针对的控件中的依赖属性。现在,依赖项属性可以具有默认值 - 但是在定义中设置:

public static readonly DependencyProperty SomethingProperty = DependencyProperty.Register(
    "Something", 
    typeof(double), 
    typeof(SomethingControl), 
    new FrameworkPropertyMetadata(1.0));

                                   ^ default value

对于OP,Control类拥有FontSize DP,因此您无法以这种方式设置其默认值。所以问题就变成了,你想做什么?有两种选择:

  1. 不使用ControlTemplate,而是使用Style,并将FontSize设置为所需的默认值。 (您也可以使用Style应用ControlTemplate。)
  2. 使用自己的“FontSize”依赖项属性创建自己的派生控件,并按上述方式应用所需的默认值。
  3. 在应用程序的根控件上设置FontSize - 这将有效地在整个应用程序中设置默认字体大小。
  4. 在不了解更多背景的情况下,很难说哪种方法适合您的具体情况。