根据其他控件中的属性更改属性 - WPF

根据其他控件中的属性更改属性 - WPF

问题描述:

当我的文本框的文本框属性Validation.HasErrorsTrue时,我想使用某种触发器将窗口中的按钮更改为IsEnabled = False根据其他控件中的属性更改属性 - WPF

我可以在Button上使用某种触发器吗?

如果是的话,一些例子会很好!

+0

WPF TextBox对象没有Validation属性 - 我错过了什么吗? – Jake 2010-03-10 23:58:43

+0

杰克:你错过了Validation.HasError附加属性。 – itowlson 2010-03-11 00:00:58

+1

@itowlson:谢谢,张贴在此情况下,我不是一个谁还有东西需要学习有关WPF的唯一的人;) http://msdn.microsoft.com/en-us/library/system.windows.controls .validation.haserror.aspx – Jake 2010-03-11 00:45:47

您可以通过使用样式来做到这一点。如果您想直接比分扳成文本框,你可以做这样的事情:

<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的其他属性。在这种情况下,样式可以重复使用其他按钮和文本框对。

+0

是否可以将一个按钮应用于多个文本框? – 2010-03-11 00:39:19

+0

您可以尝试使用MultiBinding和自定义IMultiValueConverter。我没有与这些太多的经验,但总的想法是按钮的IsEnabled直接绑定的是结合所有的文本框(V​​alidation.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。

+0

我试图用图像和可见性属性,它不起作用。当我使用Button(使用Visibility属性)时,它确实有效。我无法弄清楚为什么。有什么想法吗?谢谢,Marc。 – obiwanjacobi 2011-10-21 20:25:39