根据其他控件中的属性更改属性 - WPF
当我的文本框的文本框属性Validation.HasErrors
为True
时,我想使用某种触发器将窗口中的按钮更改为IsEnabled = False
。根据其他控件中的属性更改属性 - WPF
我可以在Button上使用某种触发器吗?
如果是的话,一些例子会很好!
您可以通过使用样式来做到这一点。如果您想直接比分扳成文本框,你可以做这样的事情:
<Style x:Key="DisabledOnErrors" TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding (Validation.HasErrors)}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
<TextBox x:Name="myTextBox" />
<Button Style="{StaticResource DisabledOnErrors}"
DataContext="{Binding ElementName=myTextBox}" />
这工作如果按钮是不是已经绑定到DataContext的其他属性。在这种情况下,样式可以重复使用其他按钮和文本框对。
是否可以将一个按钮应用于多个文本框? – 2010-03-11 00:39:19
您可以尝试使用MultiBinding和自定义IMultiValueConverter。我没有与这些太多的经验,但总的想法是按钮的IsEnabled直接绑定的是结合所有的文本框(Validation.HasErrors)一个MultiBinding,使用的ElementName语法如下itowlson显示。然后,您需要一个IMultiValueConverter,它将获取一个bool值列表,然后将它们全部组合在一起。 – 2010-03-11 14:34:56
是的,你可以用触发器这样做,而是因为你是指另一个元素,你必须使用一个DataTrigger,而不是正常的触发器:
<Button>
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding (Validation.HasError), ElementName=tb}" Value="True">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
注意,你必须使用一个样式而不是按钮.Triggers集合,因为Button.Triggers只能包含EventTriggers。
我试图用图像和可见性属性,它不起作用。当我使用Button(使用Visibility属性)时,它确实有效。我无法弄清楚为什么。有什么想法吗?谢谢,Marc。 – obiwanjacobi 2011-10-21 20:25:39
WPF TextBox对象没有Validation属性 - 我错过了什么吗? – Jake 2010-03-10 23:58:43
杰克:你错过了Validation.HasError附加属性。 – itowlson 2010-03-11 00:00:58
@itowlson:谢谢,张贴在此情况下,我不是一个谁还有东西需要学习有关WPF的唯一的人;) http://msdn.microsoft.com/en-us/library/system.windows.controls .validation.haserror.aspx – Jake 2010-03-11 00:45:47