如何从触发器绑定到另一个控件的属性?

时间:2010-03-26 00:45:13

标签: wpf xaml triggers styles

在我的特定情况下,我想绑定到TextBox的IsReadOnly属性来设置Button的Content属性?它们都是同一个StackPanel的一部分。

我尝试过使用DataTrigger和TextBox的ElementName绑定,以及使用TextBox名称作为SourceName的触发器。

有什么想法吗?

2 个答案:

答案 0 :(得分:74)

您需要将触发器指定为样式的一部分 - Button上的Triggers集合本身只能包含事件触发器。考虑到这一点,DataTrigger工作正常。但是,有一个问题:Trigger Setter的值不会覆盖本地Content属性。因此,您还必须在样式中设置默认内容。这是它的外观:

<Button>  <!-- Note no content set directly on button -->
  <Button.Style>
    <Style TargetType="Button">
      <Setter Property="Content" Value="You may write!!!" />  <!-- Here is the 'normal' content -->
      <Style.Triggers>
        <!-- Here is how we bind to another control's property -->
        <DataTrigger Binding="{Binding IsReadOnly, ElementName=textBox}" Value="True">
          <Setter Property="Content" Value="NO NO NO" />  <!-- Here is the 'override' content -->
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

答案 1 :(得分:8)

你试过这个:

<StackPanel x:Name="LayoutRoot">
    <Button Width="75" Content="{Binding IsReadOnly, ElementName=textBox, Mode=Default}" />
    <TextBox x:Name="textBox" VerticalAlignment="Top" Text="TextBox" />
</StackPanel>

...