如何实现BoolToVisibilityConverter

14 浏览
0 Comments

如何实现BoolToVisibilityConverter

在我的应用程序中,我想要切换StackPanel中一个项的可见性。我的StackPanel包含一个Image和一个TextBlock。我应该如何正确使用BoolToVisibilityConverter来切换TextBlock的可见性,并为用户保存这个设置?

目前我有以下内容,尽管我遇到了一些错误。重要提示:我需要使用一个ApplicationBar菜单项作为驱动TextBlock可见性切换的点击事件。

编辑

错误不再发生,但是TextBlock的可见性没有改变。

XAML

xmlns:common="clr-namespace:TestApp.Common"

    


                    
                        
                            
                        
                    
                    
                        
                            
                                
                                
                            
                        
                    
                

代码后台

private void BuildLocalizedApplicationBar()
    {
        ApplicationBar = new ApplicationBar();
        ApplicationBarMenuItem showFilterNamesMenuItem = new ApplicationBarMenuItem();
        if (Settings.ShowFilterNames.Value)
            showFilterNamesMenuItem.Text = AppResources.EditPage_EffectNames_Hide;
        else
            showFilterNamesMenuItem.Text = AppResources.EditPage_EffectNames_Show;
        showFilterNamesMenuItem.Click += showFilterNamesMenuItem_Click;
        ApplicationBar.MenuItems.Add(showFilterNamesMenuItem);
    }
void showFilterNamesMenuItem_Click(object sender, EventArgs e)
    {
        if(Settings.ShowFilterNames.Value)
        {
            ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).Text = AppResources.EditPage_EffectNames_Hide;
            Settings.ShowFilterNames.Value = false;
            //在这里切换文本块的可见性
        }
        else
        {
            ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).Text = AppResources.EditPage_EffectNames_Show;
            Settings.ShowFilterNames.Value = true;
            //在这里切换文本块的可见性
        }               
    }

一个用于BooleanToVisibilityConverter的类

//BooleanToVisibilityConverter上的错误,指示没有实现接口成员'System.Windows.Data.IValueConverter.Convert(object, System.Type, object, System.Globalization.CultureInfo)
public class BooleanToVisibilityConverter : IValueConverter   
{   
public class BooleanToVisibilityConverter : IValueConverter   
{   
    public object Convert(object value, Type targetType, object parameter, CultureInfo language)      
    {      
        return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;      
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo language)      
    {      
        return value is Visibility && (Visibility)value == Visibility.Visible;      
    }   
}

0
0 Comments

如何实现BoolToVisibilityConverter

在Windows Phone中,没有提供实现BoolToVisibilityConverter的功能。然而,在MSDN中已经提供了一个实现该转换器的方法。为了解决这个问题,我们需要自己实现BoolToVisibilityConverter。

以下是实现BoolToVisibilityConverter的步骤:

1. 在项目中创建一个新的类文件,命名为BoolToVisibilityConverter.cs。

2. 在该类文件中,添加以下代码:

using System;
using System.Windows;
using System.Windows.Data;
namespace YourNamespace
{
    public class BoolToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool boolValue = (bool)value;
            return boolValue ? Visibility.Visible : Visibility.Collapsed;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

3. 保存并编译项目。

4. 现在,您可以在XAML文件中使用BoolToVisibilityConverter。


    
        
    
    
    
        
    

在上面的示例中,我们首先在Window的Resources中声明了BoolToVisibilityConverter。然后,我们将TextBlock的Visibility属性绑定到一个名为IsVisible的布尔属性,并将BoolToVisibilityConverter作为转换器。

现在,当IsVisible为true时,TextBlock将可见;当IsVisible为false时,TextBlock将隐藏。

这就是如何实现BoolToVisibilityConverter的方法。通过自己实现这个转换器,我们可以在Windows Phone应用程序中使用该功能。

0
0 Comments

问题的出现原因:在这段代码中,我们需要将布尔值转换为可见性,以便在界面上显示或隐藏某些元素。然而,这段代码并没有提供一个实现布尔值到可见性转换的方法。

解决方法:为了解决这个问题,我们可以实现一个名为BoolToVisibilityConverter的类,并将其作为IValueConverter接口的一个实现。在Convert方法中,我们将检查传入的value是否为布尔类型,并根据布尔值的真假将其转换为Visibility.Visible或Visibility.Collapsed。在ConvertBack方法中,我们将检查传入的value是否为Visibility类型,并将其转换为布尔值,如果可见性为Visible,则返回true,否则返回false。

下面是实现BoolToVisibilityConverter的代码:

public class BoolToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value is Visibility && (Visibility)value == Visibility.Visible;
    }
}

通过使用这个BoolToVisibilityConverter,我们可以轻松地在XAML中实现布尔值到可见性的转换。例如,我们可以将Converter绑定到某个元素的可见性属性,然后将布尔值绑定到Converter的参数中。这样,当布尔值为真时,元素将显示出来,当布尔值为假时,元素将隐藏起来。

这就是如何实现BoolToVisibilityConverter的方法,它可以帮助我们在界面上根据布尔值来显示或隐藏元素。通过实现这个转换器,我们可以提高代码的可读性和重用性,并更好地组织我们的界面逻辑。

0
0 Comments

问题出现的原因是需要将一个布尔值转换为Visibility类型,以便在界面上控制元素的可见性。解决方法是实现一个BoolToVisibilityConverter,使用IValueConverter接口,将布尔值转换为Visibility类型。

以下是实现BoolToVisibilityConverter的代码:

public class BoolToVisibilityConverter : IValueConverter
{
    private object GetVisibility(object value)
    {
        if (!(value is bool))
            return Visibility.Collapsed;
        bool objValue = (bool)value;
        if (objValue)
        {
            return Visibility.Visible;
        }
        return Visibility.Collapsed;
    }
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return GetVisibility(value);
    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

以上代码中,GetVisibility方法根据传入的布尔值来确定返回的Visibility类型。如果传入的值不是布尔类型,返回Collapsed;如果是true,返回Visible;如果是false,返回Collapsed。

Convert方法是IValueConverter接口的方法,用于将传入的布尔值转换为Visibility类型。

ConvertBack方法是IValueConverter接口的方法,用于在需要时将Visibility类型转换回布尔值。在这个例子中,它没有实现,直接抛出了NotImplementedException异常。

使用BoolToVisibilityConverter时,只需在XAML中引用该转换器,并在需要转换的地方使用Binding来绑定布尔值和Visibility类型的属性即可。例如:


    
        
    
    

以上代码中,将TextBlock的Visibility属性绑定到一个名为IsVisible的布尔属性,并使用BoolToVisibilityConverter来进行转换。这样,当IsVisible为true时,TextBlock将可见;当IsVisible为false时,TextBlock将隐藏。

通过实现BoolToVisibilityConverter,我们可以方便地将布尔值转换为Visibility类型,实现界面元素的动态显示和隐藏。

0