【wpf】转换器 Converter

这篇具有很好参考价值的文章主要介绍了【wpf】转换器 Converter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天积攒了一个转换器的用法,分享给各位。

我们经常会有这种需求: 某些控件有时需要显示,有时需要隐藏,比如:

【wpf】转换器 Converter

那,我就想通过一个bool变量和是否显示绑定。

但是我们知道,是否显示,这个属性 Visibility 它并不是一个bool类型无法直接绑定,此时我们需要一个转换器!

接下来,这个转换器可以讲bool类型转换为字符串类型,十分通用,我们就已Visibility举个例子:

<UserControl.Resources>
    <wpfcv:Bool2StringConverter  x:Key="b2s"/>
</UserControl.Resources>

------------------------------------------------------------------
Visibility="{Binding CanShowCross,
Converter={StaticResource b2s},
ConverterParameter=Visible:Hidden}"

 这里我们使用了 Bool2StringConverter  这个转换器,使用这个转换器是,还给转换器传了一个参数,可以将其看成一个字符串 " Visible:Hidden "

记下来我们看看 Bool2StringConverter  是如何定义的。

后台代码

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;

namespace WpfConverter
{
    public class Bool2StringConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            
            if (parameter == null) return DependencyProperty.UnsetValue; 
            if (value == null) return DependencyProperty.UnsetValue;
            
            //将参数字符分段 parray[0]为比较值,parray[1]为true返回值,parray[2]为false返回值
            string[] parray = parameter.ToString().ToLower().Split(':'); 
            if (value is bool && parray.Length >=2)
            {
                //value为bool,true返回parray[1],false返回parray[2]
                return (bool)value? parray[0] : parray[1];
            }
            else
            {
                return DependencyProperty.UnsetValue;
            }
            
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            //throw new NotImplementedException();
            return DependencyProperty.UnsetValue;
        }
    }
}

在后台中,我们根据绑定的bool值,来判断返回,字符串 Visible:Hidden 的哪个部分,如果是true

就返回Visible, 否则返回Hidden。是不是很巧妙。

这样我就可以通过这么一句话:

Visibility="{Binding CanShowCross,
Converter={StaticResource b2s},
ConverterParameter=Visible:Hidden}"

来实现某个控件的显示与否了!

--------------2023年10月9日

根据网友weixin_42179035 的提问,我发现确实少了点内容:补充内容如下

private bool canShowCross;
        /// <summary>
        /// 十字线显示
        /// </summary>
        public bool CanShowCross
        {
            get { return canShowCross; }
            set { SetProperty(ref canShowCross, value); }
        }

这里就是通过,CheekBox的IsCheeked属性和 Line的 Visibility属性,同时绑定了CanShowCross:

【wpf】转换器 Converter

这样当点击CheekBox时,CanShowCross就会被改变,此时也就会改变Line的 Visibility属性。

<Line X1="0" Stroke="Pink" Focusable="False" Visibility="{Binding CanShowCross,Converter={StaticResource b2s},ConverterParameter=Visible:Hidden}"
      Y1="{Binding ActualHeight, Converter={StaticResource half}, ElementName=hSmart}"
      X2="{Binding ActualWidth, ElementName=hSmart}"
      Y2="{Binding ActualHeight, Converter={StaticResource half},ElementName=hSmart}" />
<Line X1="{Binding ActualWidth, Converter={StaticResource half},ElementName=hSmart}"
      Y1="0"  Stroke="Pink" Focusable="False" IsEnabled="False" Visibility="{Binding CanShowCross,Converter={StaticResource b2s},ConverterParameter=Visible:Hidden}"
      X2="{Binding ActualWidth, Converter={StaticResource half},ElementName=hSmart}"
      Y2="{Binding ElementName=hSmart, Path=ActualHeight}" />
 
<ToolBar Grid.ColumnSpan="2">
    <CheckBox IsChecked="{Binding CanShowCross}"  Margin="5,0,0,0">十字线</CheckBox>
</ToolBar>

(补充2)这里又引出了一个half转换器,顾名思义就得到属性值的一半大小:文章来源地址https://www.toymoban.com/news/detail-425364.html

public class HalfConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {

            if (value == null || (double)value == 0) return DependencyProperty.UnsetValue;

            return (double)(value) / 2;

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            //throw new NotImplementedException();
            return DependencyProperty.UnsetValue;
        }
    }

到了这里,关于【wpf】转换器 Converter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF多值转换器

    背景:实现Slider拖动可以调整rgb 单转换器:WPF中数据绑定转换器Converter-CSDN博客 在View中:         -- Fill中绑定的资源是Window.Resources中引入进来的转换器key         -- 转换器返回的是一个SolidBrush,其实就是相当于在这个地方写个SolidBrush         -- 这里绑定的是Slider的值,

    2024年01月23日
    浏览(30)
  • WPF中值转换器的使用

    在WPF(Windows Presentation Foundation)中,值转换器(Value Converter)是一种机制,允许你在绑定时转换绑定源和绑定目标之间的值。值转换器实现了 IValueConverter 接口,该接口包含两个方法: Convert 和 ConvertBack 。这两个方法分别用于在绑定源到目标时进行值转换,以及在目标到源时

    2024年02月19日
    浏览(29)
  • 最全的视频转换器工具清单,这18款免费视频格式转换器记得收藏

    审查和比较具有功能和定价的最佳视频转换器软件。从这个顶级付费和免费在线视频转换器工具列表中选择,以快速轻松地转换任何视频: 什么是视频转换器? 视频转换工具允许您将视频从一种格式转换为另一种格式。第一个商业上成功的视频格式是 Quad,它于 1956 年推出。

    2023年04月08日
    浏览(81)
  • 在线PDF格式转换器推荐,小圆象PDF转换器满足您的办公需求

    作为上班族,我们都知道在办公应用中经常使用PDF文件。PDF具有较高的内容安全性,并且可以在多种设备上打开和浏览而不会出现格式混乱的问题。然而,PDF文件的一个短板是其不易编辑。通常情况下,我们需要将PDF文件转换为Word文档,以便提取其中的文字内容或进行格式编

    2024年02月11日
    浏览(41)
  • 【图像增强器和转换器】Winxvideo AIAI 驱动的视频/图像增强器和转换器软件。

    Winxvideo AI,以前称为WinX HD Video Converter Deluxe,是一款利用尖端深度学习技术的高级软件工具包。它提供了一套全面的工具,用于放大、稳定、转换、压缩、录制和编辑 4K/8K/HDR 视频。 AI 驱动的功能通过全面的 GPU 加速确保影院级质量。 Winxvideo AI 提供了一套强大且易于使用的视

    2024年02月20日
    浏览(36)
  • 电源转换器类型

    1根据转换的形式分类,可分为: AC-AC(交流-交流)转换器:如交流电源变压器、变频器等。 AC-DC(交流-直流)转换器:整流器。 DC-DC(直流-直流)转换器。 DC-AC(直流-交流)转换器:逆变器。 2 根据转换的方法分类,可分为: 线性电源:使用工作在线性区的功率器件调整

    2024年02月08日
    浏览(43)
  • RabbitMQ消息转换器

    在SpringAMQP的发送方法中,发送消息和接受消息的类型都是Object,也就是说,我们可以发送任意对象类型的消息, SpringAMQP都会帮我们把发送的消息序列化为字节后再进行发送 。下面,我们可以演示一下: 假设我们现在有个User类,如下(切记一定要实现Serializable接口,才能被

    2024年02月05日
    浏览(41)
  • ip转换器哪个好用 ip地址切换器有哪些

    在互联网时代,IP转换器成为了实现高效工作的常见工具。而如今,市面上涌现出了众多的IP转换器软件,使得用户在选择时感到困惑。本文将介绍一种深度IP转换器软件,探讨其特点和优势,以及与其他软件相比的差异,帮助读者在众多产品中作出明智的选择。 强大的功能和

    2024年02月13日
    浏览(41)
  • 电脑视频转换成mp4格式,视频格式转换器转换

    怎么把 电脑视频转换成mp4格式 ? 使用视频转换器,可以转换来自各种设备的音视频格式,包括相机、手机、视频播放器、电视、平板电脑等。因此,音视频爱好者都可以使用它在各种设备上播放或在社交平台上分享。 主要人群及作用: 音乐爱好者:如果酷爱音乐,那么视

    2023年04月13日
    浏览(31)
  • Rabbitmq的消息转换器

    Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象 ,只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题: 数据体积过大 有安全漏洞 可读性差 发送一个Map对象   发送消息后查看控制台   显

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包