當我的文本框的文本框屬性Validation.HasErrors
爲True
時,我想使用某種觸發器將窗口中的按鈕更改爲IsEnabled = False
。根據其他控件中的屬性更改屬性 - WPF
我可以在Button上使用某種觸發器嗎?
如果是的話,一些例子會很好!
當我的文本框的文本框屬性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