Gis*_*shu 277
使用MultiDataTrigger类型
<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>
Run Code Online (Sandbox Code Playgroud)
ser*_*ine 46
@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>
Run Code Online (Sandbox Code Playgroud)
您可以以任何方式使用Convert方法中的值来生成适合您的条件.
cod*_*k3y 20
详细说明@ serine的答案并说明使用非平凡的多值条件:我需要在项目上显示布尔条件的"暗淡"覆盖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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
为了完整起见,我的转换器定义为 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118379 次 |
| 最近记录: |