亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解WPF中值轉(zhuǎn)換器的使用方法

 更新時(shí)間:2024年02月11日 08:38:34   作者:Dm_dotnet  
在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機(jī)制,允許你在綁定時(shí)轉(zhuǎn)換綁定源和綁定目標(biāo)之間的值,本文給大家介紹了WPF中值轉(zhuǎn)換器的使用方法,需要的朋友可以參考下

什么是值轉(zhuǎn)換器

在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機(jī)制,允許你在綁定時(shí)轉(zhuǎn)換綁定源和綁定目標(biāo)之間的值。值轉(zhuǎn)換器實(shí)現(xiàn)了 IValueConverter 接口,該接口包含兩個(gè)方法:ConvertConvertBack。這兩個(gè)方法分別用于在綁定源到目標(biāo)時(shí)進(jìn)行值轉(zhuǎn)換,以及在目標(biāo)到源時(shí)進(jìn)行值轉(zhuǎn)換。

使用值轉(zhuǎn)換器的Demo

首先創(chuàng)建一個(gè)綁定數(shù)據(jù)源類(lèi):

using System;
using System.ComponentModel;
?
namespace BindConversion
{
    public class MyData : INotifyPropertyChanged
    {
        private DateTime _thedate;
?
        public MyData()
        {
            _thedate = DateTime.Now;
        }
?
        public DateTime TheDate
        {
            get { return _thedate; }
            set
            {
                _thedate = value;
                OnPropertyChanged("TheDate");
            }
        }
?
        // Declare event
        public event PropertyChangedEventHandler PropertyChanged;
        // OnPropertyChanged method to update property value in binding
        private void OnPropertyChanged(string info)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
        }
    }
}

有一個(gè)類(lèi)型為DateTime的屬性TheDate,該類(lèi)實(shí)現(xiàn)了INotifyPropertyChanged接口。

再創(chuàng)建一個(gè)轉(zhuǎn)換器類(lèi):

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
?
namespace BindConversion
{
    public class MyConverter : IValueConverter
    {
        public object Convert(object o, Type type,
            object parameter, CultureInfo culture)
        {
            var date = (DateTime) o;
            switch (type.Name)
            {
                case "String":
                    return date.ToString("F", culture);
                case "Brush":
                    return Brushes.Red;
                default:
                    return o;
            }
        }
?
        public object ConvertBack(object o, Type type,
            object parameter, CultureInfo culture) => null;
    }
}

該類(lèi)實(shí)現(xiàn)了IValueConverter接口。

IValueConverter介紹

如果要將值轉(zhuǎn)換器與綁定相關(guān)聯(lián),請(qǐng)創(chuàng)建實(shí)現(xiàn) 接口的 IValueConverter 類(lèi), Convert 然后實(shí)現(xiàn) 和 ConvertBack 方法。 轉(zhuǎn)換器可以將數(shù)據(jù)從一種類(lèi)型更改為另一種類(lèi)型,根據(jù)文化信息轉(zhuǎn)換數(shù)據(jù),或修改演示文稿的其他方面。

值轉(zhuǎn)換器具有區(qū)域性感知能力。 ConvertConvertBack 方法都有一個(gè)culture參數(shù),用于指示區(qū)域性信息。 如果區(qū)域性信息與轉(zhuǎn)換無(wú)關(guān),則可以在自定義轉(zhuǎn)換器中忽略該參數(shù)。

該接口有兩個(gè)方法ConvertConvertBack。

public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture);

中各參數(shù)的含義如下所示:

參數(shù)類(lèi)型含義
valueobject綁定源生成的值。
targetTypeType綁定目標(biāo)屬性的類(lèi)型。
parameterobject要使用的轉(zhuǎn)換器參數(shù)。
cultureCultureInfo要用在轉(zhuǎn)換器中的區(qū)域性。

再看一下MainWindow.xaml:

<Window x:Class="BindConversion.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BindConversion"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Width="300" Height="300" Name="Page1">
        <StackPanel.Resources>
            <local:MyData x:Key="MyDataSource"/>
            <local:MyConverter x:Key="MyConverterReference"/>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="3"/>
            </Style>
        </StackPanel.Resources>
?
        <StackPanel.DataContext>
            <Binding Source="{StaticResource MyDataSource}"/>
        </StackPanel.DataContext>
?
        <TextBlock Text="Unconverted data:"/>
        <TextBlock Text="{Binding Path=TheDate}"/>
        <TextBlock Text="Converted data:"/>
        <TextBlock Name="myconvertedtext"
    Foreground="{Binding Path=TheDate,
                         Converter={StaticResource MyConverterReference}}">
            <TextBlock.Text>
                <Binding Path="TheDate"
               Converter="{StaticResource MyConverterReference}"/>
            </TextBlock.Text>
        </TextBlock>
?
    </StackPanel>
</Window>

首先定義了資源:

  <StackPanel.Resources>
            <local:MyData x:Key="MyDataSource"/>
            <local:MyConverter x:Key="MyConverterReference"/>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="3"/>
            </Style>
  </StackPanel.Resources>

一個(gè)名為MyDataSource類(lèi)型為MyData的資源與一個(gè)名為MyConverterReference類(lèi)型為MyConverter的資源。

我們發(fā)現(xiàn)有三處地方用到了Binding

  <Binding Source="{StaticResource MyDataSource}"/>

這種形式我們已經(jīng)見(jiàn)過(guò)了。

  <TextBlock Name="myconvertedtext"
    Foreground="{Binding Path=TheDate,
                         Converter={StaticResource MyConverterReference}}">
  <Binding Path="TheDate"
               Converter="{StaticResource MyConverterReference}"/>

注意,這兩處Binding中都出現(xiàn)了Converter

Converter介紹

通過(guò)實(shí)現(xiàn) IValueConverter 接口并實(shí)現(xiàn) Convert 方法創(chuàng)建轉(zhuǎn)換器。 該方法應(yīng)返回一個(gè)對(duì)象,該對(duì)象的類(lèi)型與綁定所面向的依賴(lài)屬性的類(lèi)型相同,或者至少返回一個(gè)可隱式強(qiáng)制轉(zhuǎn)換或轉(zhuǎn)換為目標(biāo)類(lèi)型的類(lèi)型。

再結(jié)合這段代碼:

 public object Convert(object o, Type type,
     object parameter, CultureInfo culture)
 {
     var date = (DateTime) o;
     switch (type.Name)
     {
         case "String":
             return date.ToString("F", culture);
         case "Brush":
             return Brushes.Red;
         default:
             return o;
     }
 }

根據(jù)目標(biāo)類(lèi)型的不同,進(jìn)行不同的轉(zhuǎn)換。

TextBlock.Foreground的類(lèi)型為Brush就返回Brushes.Red

TextBlock.Text的類(lèi)型為String就返回date.ToString("F", culture)。

結(jié)果如下圖所示:

Demo代碼來(lái)源

https://github.com/microsoft/WPF-Samples/tree/main/Data%20Binding/BindConversion

以上就是詳解WPF中值轉(zhuǎn)換器的使用方法的詳細(xì)內(nèi)容,更多關(guān)于WPF轉(zhuǎn)換器使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳談C# 圖片與byte[]之間以及byte[]與string之間的轉(zhuǎn)換

    詳談C# 圖片與byte[]之間以及byte[]與string之間的轉(zhuǎn)換

    下面小編就為大家?guī)?lái)一篇詳談C# 圖片與byte[]之間以及byte[]與string之間的轉(zhuǎn)換。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • C#通過(guò)經(jīng)緯度計(jì)算2個(gè)點(diǎn)之間距離的實(shí)現(xiàn)代碼

    C#通過(guò)經(jīng)緯度計(jì)算2個(gè)點(diǎn)之間距離的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#通過(guò)經(jīng)緯度計(jì)算2個(gè)點(diǎn)之間距離實(shí)現(xiàn)代碼,本文對(duì)實(shí)現(xiàn)原理、經(jīng)緯度基本知識(shí)等一并做了講解,需要的朋友可以參考下
    2014-08-08
  • C#圖片按比例縮放實(shí)例

    C#圖片按比例縮放實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C#圖片按比例縮放的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • C#中參數(shù)個(gè)數(shù)可變的方法實(shí)例分析

    C#中參數(shù)個(gè)數(shù)可變的方法實(shí)例分析

    這篇文章主要介紹了C#中參數(shù)個(gè)數(shù)可變的方法,以一個(gè)簡(jiǎn)單實(shí)例分析了C#中參數(shù)個(gè)數(shù)可變的方法,主要是使用params關(guān)鍵字來(lái)實(shí)現(xiàn)的,是C#編程中比較實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • C#生成二維碼的方法

    C#生成二維碼的方法

    這篇文章主要介紹了C#生成二維碼的方法,包括動(dòng)態(tài)鏈接庫(kù)dll文件的調(diào)用、代碼的實(shí)現(xiàn)與使用示例,非常實(shí)用,需要的朋友可以參考下
    2014-11-11
  • C#判斷一個(gè)字符串是否是數(shù)字或者含有某個(gè)數(shù)字的方法

    C#判斷一個(gè)字符串是否是數(shù)字或者含有某個(gè)數(shù)字的方法

    這篇文章主要介紹了C#判斷一個(gè)字符串是否是數(shù)字或者含有某個(gè)數(shù)字的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • 關(guān)于C#10 新特性 Lambda 優(yōu)化

    關(guān)于C#10 新特性 Lambda 優(yōu)化

    這篇文章主要介紹了C# 10 新特性 Lambda 優(yōu)化,C# 10 對(duì)于 Lambda 做了很多的優(yōu)化,我們可以在 C# 中更加方便地使用委托和 Lambda 了,下面就來(lái)看一些示例,需要的朋友也可以參考一下
    2021-11-11
  • Unity實(shí)現(xiàn)圖片生成灰白圖的方法

    Unity實(shí)現(xiàn)圖片生成灰白圖的方法

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)圖片生成灰白圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#編程實(shí)現(xiàn)發(fā)送郵件的方法(可添加附件)

    C#編程實(shí)現(xiàn)發(fā)送郵件的方法(可添加附件)

    這篇文章主要介紹了C#編程實(shí)現(xiàn)發(fā)送郵件的方法,具備添加附件的功能,涉及C#文件傳輸及郵件發(fā)送的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • C#實(shí)現(xiàn)條形碼識(shí)別的解決方案分享

    C#實(shí)現(xiàn)條形碼識(shí)別的解決方案分享

    主流的識(shí)別庫(kù)主要有ZXing.NET和ZBar,OpenCV 4.0后加入了QR碼檢測(cè)和解碼功能,所以本文主要和大家分享了使用ZBar進(jìn)行條形碼識(shí)別的示例代碼,需要的可以參考一下
    2023-07-07

最新評(píng)論