我正在尝试为我的控件创建一个样式,它根据控件的只读状态更改控件的外观。
我有触发器正常工作,但我想根据其他属性的值更改一些属性。
作为示例,采用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
和Padding
的初始值来定义BorderThickness
属性的值。
我怎样才能达到这种风格?
答案 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>
或者,看看你是否可以将边框颜色设置为透明,以便它占据相同的空间但不可见。