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

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

我试着用一个DataTrigger来绑定到TextBox的ElementName和一个使用TextBox名称作为SourceName的触发器。

有什么想法吗?

您需要将触发器指定为样式的一部分 – Button本身上的Triggers集合只能包含事件触发器。 考虑到这一点,一个DataTrigger工作正常。 但是,有一个折痕:来自触发器Setter的值不会覆盖本地Content属性。 所以你必须在Style中设置默认的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> 

你有没有试过这个:

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

??