如何爲WPF中的數據觸發提供多個條件?如何爲WPF中的數據觸發提供多個條件?
140
A
回答
238
<Style TargetType="ListBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=State}" Value="WA">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name}" Value="Portland" />
<Condition Binding="{Binding Path=State}" Value="OR" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Cyan" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
39
@jasonk - 如果你想擁有 「或」 否定再因爲所有條件(A和B)< =>〜(〜A或〜B)
但如果你有其他的值不是布爾嘗試使用的類型轉換器:
<MultiDataTrigger.Conditions>
<Condition Value="True">
<Condition.Binding>
<MultiBinding Converter="{StaticResource conditionConverter}">
<Binding Path="Name" />
<Binding Path="State" />
</MultiBinding>
</Condition.Binding>
<Setter Property="Background" Value="Cyan" />
</Condition>
</MultiDataTrigger.Conditions>
可以使用值轉換方法,你想生產出適合你的條件的任何方式。
14
詳細說明@serine's answer並說明如何處理非平凡的多值條件:我需要在布爾條件NOT a AND (b OR NOT c)
的條目上顯示「暗淡」覆蓋圖。
對於背景,這是一個「多選」問題。如果用戶選擇了錯誤的答案,它將變爲已禁用(變暗,無法再次選擇)。一個自動代理有能力重點在任何特定的選擇給予解釋(邊框突出顯示)。當代理人專注於某個物品時,即使該物品已被禁用,也不應將其變暗。所有未聚焦的項目都標記爲不重點,應該變暗。
調光的邏輯是這樣的:
NOT IsFocused AND (IsDefocused OR NOT Enabled)
爲了實現這個邏輯,我做了一個通用的IMultiValueConverter
命名(尷尬),以
// 'P' represents a parenthesis
// ! a && (b || ! c)
class NOT_a_AND_P_b_OR_NOT_c_P : IMultiValueConverter
{
// redacted [...] for brevity
public object Convert(object[] values, ...)
{
bool a = System.Convert.ToBoolean(values[0]);
bool b = System.Convert.ToBoolean(values[1]);
bool c = System.Convert.ToBoolean(values[2]);
return !a && (b || !c);
}
...
}
符合我的邏輯在XAML我在MultiDataTrigger
的<Style><Style.Triggers>
資源
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!-- when the equation is TRUE ... -->
<Condition Value="True">
<Condition.Binding>
<MultiBinding Converter="{StaticResource NOT_a_AND_P_b_OR_NOT_c_P}">
<!-- NOT IsFocus AND (IsDefocused OR NOT Enabled) -->
<Binding Path="IsFocus"/>
<Binding Path="IsDefocused" />
<Binding Path="Enabled" />
</MultiBinding>
</Condition.Binding>
</Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<!-- ... show the 'dim-out' overlay -->
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
而對完整性的緣故,我的轉換器在ResourceDictionary
<ResourceDictionary xmlns:conv="clr-namespace:My.Converters" ...>
<conv:NOT_a_AND_P_b_OR_NOT_c_P x:Key="NOT_a_AND_P_b_OR_NOT_c_P" />
</ResourceDictionary>
相關問題
- 1. emberjs爲多個組件提供數據
- 2. 如何從testng中的多個文件中提供數據提供者
- 3. WPF XAML如何爲數據網格編寫觸發器或多觸發器?
- 4. 觸發多個WHEN條件
- 5. 在WPF中,如何觸發外部提供的元素上的鼠標事件?
- 6. 如何爲Winamp插件提供數據?
- 7. 多個條件不在javascript中觸發
- 8. 如何給PostgreSQL中的觸發函數提供參數?
- 9. 如何刷新wpf數據觸發器?
- 10. if條件中的多個條件在我的sql觸發器
- 11. 如何加速提供大量數據的WPF控件?
- 12. 如何寫多條件觸發在MySQL
- 13. SQLITE觸發器的多個條件
- 14. WPF - 如何將兩個不同的數據視圖綁定到datagrid中的一個多數據觸發器中
- 15. Between&In operators-我如何在SQL中爲列提供多個條件
- 16. WPF按鈕數據觸發
- 17. 如何爲xs:simpleType提供多個值?
- 18. 當爲同一事件提供多個IBActions時,IBActions會觸發什麼
- 19. 在單個UIview中爲多個UItableViews提供數據源
- 20. 如何爲WPF頁面提供標題
- 21. 如何觸發條件的多個動作NG單擊
- 22. 如何觸發條件ng-click上的多個動作?
- 23. WPF中的事件觸發
- 24. 如何向Python中的模擬函數提供條件參數?
- 25. 從多個數據幀中提取條件數據
- 26. 如何在Eclipse中爲Java文件提供多個模板?
- 27. 如何將多個數據提供者放到CGridView中?
- 28. 如何使用行索引作爲WPF XAML中DataGridCell樣式的多觸發器中的條件?
- 29. 如何更新多個數據庫中的觸發器?
- 30. 是否可以爲wix包提供多個條件(bal)?
定義有沒有辦法做到在multiTrigger一個「OR」語句。例如名稱=「波特蘭」或狀態=「或」 – jasonk 2010-06-28 21:28:22
@jasonk - 不知道你是否可以用MultiTrigger做到這一點。你可以爲它定義兩個觸發器。 – Gishu 2010-06-29 05:40:22
如果它是一個簡單的OR條件語句,你可以反轉邏輯,使它變成AND。 | condition1 | condition2 |結果| | true | true | true | | true | false | true | | false | true | true | | false | false | false | 而不是檢查/ OR是否爲真,檢查兩個/ AND是否爲false,並將默認值設置爲true。 – 2014-10-28 15:47:28