【问题标题】:How can I set a style property value depending on another style property?如何根据另一个样式属性设置样式属性值?
【发布时间】:2013-04-03 14:15:24
【问题描述】:

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

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

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

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

【问题讨论】:

标签: wpf triggers


【解决方案1】:

您不能 - 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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    相关资源
    最近更新 更多