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

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


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>


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>

??