[XAML] [VB] [UWP]相对于可见性转换器 [英] [XAML][VB][UWP]Opposite Visibility Converter

查看:94
本文介绍了[XAML] [VB] [UWP]相对于可见性转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有很多场景,我希望一个元素在另一个元素折叠(或反向)时可见。我没有在代码隐藏中设置两个元素的可见性,而是想在Visibility.Visible和Visibility.Collapsed之间创建一个转换器。
这是我的转换器:

I have many scenarios in which I want one element to be visible when another is collapsed (or reverse). Rather than set both elements' Visibility in codebehind, I figured I would make a converter that between Visibility.Visible and Visibility.Collapsed. Here is my converter:

Public Class VisibilityNotConverter : Implements IValueConverter
	Public Function Convert(value As Object, targetType As Type, parameter As Object, language As String) As Object Implements IValueConverter.Convert
		Return If(CType(value, Visibility) = Visibility.Visible, Visibility.Collapsed, Visibility.Visible)
	End Function
	Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, language As String) As Object Implements IValueConverter.ConvertBack
		Return If(CType(value, Visibility) = Visibility.Visible, Visibility.Collapsed, Visibility.Visible)
	End Function
End Class

但是,这似乎不起作用。当我使用它时,我的XAML包括以下内容:

However, this does not seem to be working. When I use this, my XAML includes the following:

Visibility =" {Binding Visibility,ElementName = btnStart,Converter = {StaticResource VisibilityNot}}"

我似乎记得过去曾经使用过这样的东西,我在这里做错了吗?可见性不允许成为绑定的来源吗?谢谢。

I seem to remember using something like this in the past, am I doing something wrong here? Is Visibility not allowed to be the source of a Binding? Thanks.

Nathan Sokalski njsokalski@hotmail.com http://www.nathansokalski.com/

Nathan Sokalski njsokalski@hotmail.com http://www.nathansokalski.com/

推荐答案

嗯,一开始就有效,我的意思是刚加载控件时,控件是否正确根据另一个控件的可见性? xaml绑定是正确的。我不熟悉VB,但你能确保转换函数的输出
值正确吗?因为我不知道你如何为源代码控件设置绑定。我刚刚在这里做了一个样本。你可以参考它。

Well, did it work at the beginning, I mean the visibility of the control is correctly according to another control's visibility when you just loaded the control? The xaml binding is correct. I'm not familiar with VB but could you make sure the output value of the Convert function is correctly? Because I do not know how you set the binding for the source control. I just made a sample here. You could refer it.

Xaml:

   <Page.Resources>
        <local:TestConverter x:Key="ValueConverter"/>
    </Page.Resources>
    <StackPanel>
        <Rectangle x:Name="RedOne" Fill="Red" Width="200" Height="200" Visibility="{Binding Test,Mode=TwoWay}"/>
        <Rectangle x:Name="BlueOne" Fill="Blue" Width="200" Height="200" Visibility="{Binding Visibility,ElementName=RedOne,Converter={StaticResource ValueConverter}}"/>
        <Button Content="Click" Click="Button_Click"/>
    </StackPanel>

代码背后:

  private Visibility test;
        public Visibility Test {
            get
            {
                return test;
            }
            set
            {
                if (value != test)
                {
                    test = value;
                    OnPropertyChanged("Test");
                }
     
            }
        }
        public MainPage()
        {
            this.InitializeComponent();
            Test = Visibility.Visible;
            this.DataContext = this;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Test = Test.Equals(Visibility.Visible) ? Visibility.Collapsed : Visibility.Visible;
        }

转换器:

 public class TestConverter:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            Visibility visvalue = (Visibility)value;
          
            return visvalue.Equals(Visibility.Visible) ? Visibility.Collapsed : Visibility.Visible;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            Visibility visvalue = (Visibility)value;

            return visvalue.Equals(Visibility.Visible) ? Visibility.Collapsed : Visibility.Visible;
        }
    }

致以最诚挚的问候,

Roy


这篇关于[XAML] [VB] [UWP]相对于可见性转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆