首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何反转BooleanToVisibilityConverter?

如何反转BooleanToVisibilityConverter?
EN

Stack Overflow用户
提问于 2009-02-11 06:41:50
回答 14查看 108.4K关注 0票数 155

我在WPF中使用BooleanToVisibilityConverter将控件的Visibility属性绑定到Boolean。这很好用,但如果布尔值为true,我希望其中一个控件隐藏,如果为false,则显示它。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-02-10 22:45:07

实现您自己的IValueConverter实现。示例实现位于

http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

在您的Convert方法中,让它返回您想要的值,而不是默认值。

票数 21
EN

Stack Overflow用户

发布于 2010-03-12 01:46:00

你自己写是目前最好的解决方案。这是一个转换器的例子,可以做正常和倒置两种方式。如果你对此有任何问题,尽管问。

代码语言:javascript
复制
[ValueConversion(typeof(bool), typeof(Visibility))]
public class InvertableBooleanToVisibilityConverter : IValueConverter
{
    enum Parameters
    {
        Normal, Inverted
    }

    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        var boolValue = (bool)value;
        var direction = (Parameters)Enum.Parse(typeof(Parameters), (string)parameter);

        if(direction == Parameters.Inverted)
            return !boolValue? Visibility.Visible : Visibility.Collapsed;

        return boolValue? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return null;
    }
}
代码语言:javascript
复制
<UserControl.Resources>
  <Converters:InvertableBooleanToVisibilityConverter x:Key="_Converter"/>
</UserControl.Resources>

<Button Visibility="{Binding IsRunning, Converter={StaticResource _Converter}, ConverterParameter=Inverted}">Start</Button>
票数 49
EN

Stack Overflow用户

发布于 2009-05-27 12:35:06

代码语言:javascript
复制
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

public sealed class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var flag = false;
        if (value is bool)
        {
            flag = (bool)value;
        }
        else if (value is bool?)
        {
            var nullable = (bool?)value;
            flag = nullable.GetValueOrDefault();
        }
        if (parameter != null)
        {
            if (bool.Parse((string)parameter))
            {
                flag = !flag;
            }
        }
        if (flag)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var back = ((value is Visibility) && (((Visibility)value) == Visibility.Visible));
        if (parameter != null)
        {
            if ((bool)parameter)
            {
                back = !back;
            }
        }
        return back;
    }
}

然后将true或false作为ConverterParameter

代码语言:javascript
复制
       <Grid.Visibility>
                <Binding Path="IsYesNoButtonSetVisible" Converter="{StaticResource booleanToVisibilityConverter}" ConverterParameter="true"/>
        </Grid.Visibility>
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/534575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档