如何根据其他样式属性设置样式属性值?

时间:2013-04-11 11:41:16

标签: wpf triggers

我正在尝试为我的控件创建一个样式,它根据控件的只读状态更改控件的外观。

我有触发器正常工作,但我想根据其他属性的值更改一些属性。

作为示例,采用TextBox控件,这是我定义的基本样式触发器:

<TextBox.Style>
    <Style TargetType="TextBox">
        <Style.Triggers>
            <Trigger Property="IsReadOnly" Value="true">
                <Setter Property="BorderThickness" Value="0,0,0,0" />
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="Padding" Value="3,3,3,3" />
            </Trigger>
        </Style.Triggers>
    </Style>
</TextBox.Style>

样式工作正常,TextBox在处于只读模式时呈现接近TextBlock的样式。但我想根据PaddingPadding的初始值来定义BorderThickness属性的值。

我怎样才能达到这种风格?

1 个答案:

答案 0 :(得分:0)

你不能 - Setter的值必须是常数。

您可能希望在TextBox为只读时更改该模板,然后您可以使用TemplateBinding访问指定的Padding值。

    <Style.Triggers>
        <Trigger Property="IsReadOnly" Value="true">
          <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBoxBase}">
                <TextBlock  Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}}" Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}"/>
                </ControlTemplate>
              </Setter.Value>
          </Setter>
        </Trigger>
    </Style.Triggers>

或者,看看你是否可以将边框颜色设置为透明,以便它占据相同的空间但不可见。