WPF ControlTemplate: Как предоставить значение по умолчанию TemplateBinding?

Посмотрите на то, что Ваш компилятор генерирует, особенно для горячих областей кода.

28
задан Dave Clemmer 16 August 2011 в 02:32
поделиться

2 ответа

Вы можете просто определить сеттеры в вашем стиле для двух рассматриваемых свойств.

Например, некоторые общие определения:

<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#F3F3F3" Offset="0"/>
    <GradientStop Color="#EBEBEB" Offset="0.5"/>
    <GradientStop Color="#DDDDDD" Offset="0.5"/>
    <GradientStop Color="#CDCDCD" Offset="1"/>
</LinearGradientBrush>

<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>

Затем в вашем определении стиля:

<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}" />
<Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}" />
20
ответ дан 28 November 2019 в 03:48
поделиться

Когда вы объявляете свойство зависимости для ваших элементов управления, вы также объявляете значение по умолчанию как UIPropertyMetadata

, это свойство по умолчанию имеет значение Brushes.Red, как вы можете видеть в последней строке.

  public Brush MyBrush {
     get { return (Brush)GetValue(MyBrushProperty); }
     set { SetValue(MyBrushProperty, value); }
  }

  public static readonly DependencyProperty MyBrushProperty =
      DependencyProperty.Register("MyBrush", typeof(Brush), typeof(MyQsFeature), new UIPropertyMetadata(Brushes.Red));

the другой способ сделать это - установить цвет по умолчанию в конструкторе вашего настраиваемого элемента управления, так как конструктор всегда вызывается до того, как пользователь устанавливает какие-либо свойства, если пользователь не может установить их, они будут по умолчанию на ваши. Фактически, они всегда будут устанавливаться вами, а затем любые пользовательские настройки переопределят ваши. Это особенно эффективно, если вы хотите установить такие свойства, как Background, которые вы на самом деле не создаете, те, которые поступают от ваших базовых классов, от которых вы наследуете.

2
ответ дан 28 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: