How do I bind to another control's property from a trigger?

前端 未结 2 1966
Happy的楠姐
Happy的楠姐 2021-02-02 05:41

In my particular case, I want to bind to the IsReadOnly property of a TextBox to set the Content property of a Button? They are both part of the same StackPanel.

I\'ve t

相关标签:
2条回答
  • 2021-02-02 05:57

    You need to specify the trigger as part of a style -- the Triggers collection on the Button itself can only contain event triggers. With that in mind, a DataTrigger works fine. However, there is a wrinkle: the value from the Trigger Setter won't overwrite a local Content property. So you have to set the default Content in the Style as well. Here's how it looks:

    <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>
    
    0 讨论(0)
  • 2021-02-02 06:06

    Have you tried this:

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

    ??

    0 讨论(0)
提交回复
热议问题