3

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

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

以 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 的样式呈现。但我想Padding根据 和 的初始值来定义属性的PaddingBorderThickness

我怎样才能实现这种风格?

4

1 回答 1

1

你不能 - aSetter的值必须是一个常数。

您可能希望更改TextBox只读的模板,然后您可以使用 aTemplateBinding来访问 的分配值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>

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

于 2013-04-11T12:27:01.413 回答