在XAML绑定标记中可以否定布尔属性。不确定这是否是正确的描述。例如,我正在使用其中一个内置转换器来设置窗口边框控件的可见性,具体取决于它是否处于活动状态。
<Border BorderBrush="{StaticResource BorderColorBrush}"
BorderThickness="1"
Visibility="{Binding IsActive,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}},
Converter={StaticResource bool2VisibilityConverter}}" />
我希望与此相反,如果Window处于活动状态,我希望将Visibility设置为false。这只是一个例子,但我遇到了其他情况,将'!'应用于由库转换器评估的布尔属性会很好,所以我不必编写自定义的。{/ p >
答案 0 :(得分:4)
另一种方法是使用DataTrigger而不是绑定转换器:
<Border BorderBrush="{StaticResource BorderColorBrush}"
BorderThickness="1">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Window}}"
Value="True">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
答案 1 :(得分:2)
在ViewModel中创建一个否定属性:
public bool IsNotActive {get { return !IsActive; } }
并相应地通知变更,
- 或 -
使用InverseBoolToVisibilityConverter
:
public class InverseBoolToVisibilityConverter: BaseConverterMarkupExtension<bool, Visibility>
{
public override Visibility Convert(bool value, Type targetType, object parameter)
{
return !value ? Visibility.Visible : parameter != null ? Visibility.Hidden : Visibility.Collapsed;
}
public override bool ConvertBack(Visibility value, Type targetType, object parameter)
{
return value != Visibility.Visible;
}
}