【发布时间】:2011-02-01 00:07:51
【问题描述】:
在我的特定情况下,我想绑定到 TextBox 的 IsReadOnly 属性以设置 Button 的 Content 属性?它们都是同一个 StackPanel 的一部分。
我已经尝试使用绑定到 TextBox 的 ElementName 的 DataTrigger 和使用 TextBox 名称作为 SourceName 的触发器来执行此操作。
有什么想法吗?
【问题讨论】:
在我的特定情况下,我想绑定到 TextBox 的 IsReadOnly 属性以设置 Button 的 Content 属性?它们都是同一个 StackPanel 的一部分。
我已经尝试使用绑定到 TextBox 的 ElementName 的 DataTrigger 和使用 TextBox 名称作为 SourceName 的触发器来执行此操作。
有什么想法吗?
【问题讨论】:
您需要将触发器指定为样式的一部分——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>
【讨论】:
你试过了吗:
<StackPanel x:Name="LayoutRoot">
<Button Width="75" Content="{Binding IsReadOnly, ElementName=textBox, Mode=Default}" />
<TextBox x:Name="textBox" VerticalAlignment="Top" Text="TextBox" />
</StackPanel>
??
【讨论】: