2012-08-27 60 views
0

我有一個用戶放入服務器名稱的文本框,並且在鍵入時將其驗證爲FQDN。我也有一個風格,當驗證失敗使得文本框的背景變成粉紅色時,它會被應用。但是,我不希望在高對比度模式下出現這種情況時,而且我無法找到關於如何完成此操作的大量文獻。wpf文本框驗證反饋的可訪問性

這裏的文本框/風格:

<TextBox ...> 
    <TextBox.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ServerName.HasErrorsToShow}" Value="true"> 
        <Setter Property="TextBox.Background" Value="Pink" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

我怎樣才能做到這一點?謝謝!

編輯1:

我試過使用MultiTrigger。這看起來很有前途,但我不太對。這個代碼塊的工作(測試我能否立足於高對比度的決定):

<Style.Triggers> 
    <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="True"> 
     <Setter Property="TextBox.Background" Value="Pink" /> 
    </DataTrigger> 
</Style.Triggers> 

但是,當我嘗試添加了MultiTrigger,我得到了一個「設置屬性‘System.Windows.FrameworkElement.Style’拋出異常「異常。內部異常是「必須對'Property'具有非空值」。下面是該代碼:

<Style.Triggers> 
    <MultiTrigger> 
     <MultiTrigger.Conditions> 
      <Condition Binding="{Binding ServerName.HasErrorsToShow}" Value="True" /> 
      <Condition Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="False" /> 
     </MultiTrigger.Conditions> 
     <Setter Property="TextBox.Background" Value="Pink" /> 
    </MultiTrigger> 
</Style.Triggers> 

回答

2

我沒有測試此代碼,但是也許你可以使用一個MultiTrigger並綁定到SystemParameters對象的HighContrast財產。事情是這樣的:

[刪除,見下文]

注:我敢肯定靜態SystemParameters類的HighContrast屬性不是一個依賴項屬性,並不會提高NotifyPropertyChanged,因此如果用戶在應用程序已經打開時更改設置,我不相信觸發器會觸發。

編輯: 這種風格似乎爲我做的工作。

<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="Tag" Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}"/> 
    <Setter Property="Background" Value="Green"/> 
    <Style.Triggers> 
    <MultiDataTrigger> 
     <MultiDataTrigger.Conditions> 
      <Condition Binding="{Binding ServerName.HasErrorsToShow}" Value="true"/> 
      <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" Value="True"/> 
     </MultiDataTrigger.Conditions> 
     <Setter Property="Background" Value="Red"/> 
    </MultiDataTrigger> 
    </Style.Triggers> 
</Style> 
+0

您還可以根據「HighContrast」設置更改整個樣式。有關示例,請參見[本主題](http://social.msdn.microsoft.com/Forums/en/wpf/thread/ba9a379b-4f02-408c-954b-6057e6d0a1b5)。 –

+0

感謝您的幫助。我嘗試了你的建議,但我遇到了一個例外。我已將結果放在編輯1中。 – Jay

+0

TextBox.Background的原始值是多少?值可能是'null'嗎? –