2013-04-11 142 views
0

我目前正在尝试为我的控件创建一个样式,它根据控件的只读状态更改控件的外观。如何根据其他样式属性设置样式属性值?

我有触发器正常工作,但我想改变一些属性取决于其他属性的值。

举个例子,拿TextBox控件,这里是基本样式触发I定义:

<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> 

风格做工精细,并且该文本框与接近TextBlock的样式呈现只读的时候模式。但我想定义Padding属性的值,具体取决于PaddingBorderThickness的初始值。

我该如何做到这一点?

+0

我认为这是重复的:http://stackoverflow.com/questions/1351635/can-my-wpf-style-setter-use-a-templatebinding。尝试使用那里的分辨率。 – milanio 2013-04-11 12:30:46

回答

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> 

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