日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Binding(三):资源和ValueConverter

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Binding(三):资源和ValueConverter 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????這節講資源和值轉換器(ValueConverter)。

資源

????在XAML中,我們想要使用外部的數據或者類,需要引入其命名空間,然后將其定義為XAML頁面的資源,供給控件使用,或者我們需要封裝一個共用的樣式,同樣也需要定義成資源來使用,下面我們看一下如何定義一個資源:

<Window.Resources><ResourceDictionary><sys:String x:Key="show">我是一個資源</sys:String><Style x:Key="styleShow" TargetType="Button"><Setter Property="Background" Value="Purple" /><Setter Property="Foreground" Value="White" /> </Style></ResourceDictionary> </Window.Resources>

????資源的類型是ResourceDictionary,顧名思義,資源是用鍵值對存儲的,所以定義資源時需要給它個key,這個Key的value則根據定義資源的不同千變萬化了,像上方代碼中,定義一個string資源,它的value就是一個普通的字符串,定義一個樣式資源,它的value就是一個定義樣式的setter對象。

????那定義資源后,如何使用呢,這就又要用到標記擴展語法了,請看下面的代碼:

<StackPanel><Button Content="{StaticResource show}" Style="{StaticResource styleShow}" /> </StackPanel>

????使用StaticResource命令獲取一個資源,后面接資源的key,我給這個button引入了上方定義的資源,運行效果如下:

????另外,除了StaticResource,還有一個DynamicResource命令,StaticResource在程序一開始加載一次,如果資源中途變動,是不會再更新到使用它的控件上的,而DynamicResource則相反,它會跟著資源的更新而更新,所以要合理使用兩者。

????后臺代碼中,聲明資源和獲取資源就簡單多了,代碼如下:

this.Resources.Add("show", "我是個資源");//定義資源 object data = this.Resources["show"]; this.FindResource("show");

????后臺無非就是操作鍵值對集合,并且我們也可以使用FindResource方法來尋找資源。

ValueConverter

????上節我們提到一個情景,將Button的顯示與隱藏跟CheckBox是否選中做綁定,這個就需要用到我們接下來講的ValueConverter。

????首先我們需要新建一個類,代碼如下:

class BoolToVisibilityConvert : IValueConverter {public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null)return?DependencyProperty.UnsetValue;if ((bool)value == true){return Visibility.Visible;}else?return?Visibility.Collapsed;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value == null)return?false;if ((Visibility)value == Visibility.Visible){return true;}else return false;} }

?????使用ValueConverter需要實現IValueConverter接口,其內部有兩個方法,Convert和ConvertBack。我們在使用Binding綁定數據的時候,當遇到源屬性和目標控件需要的類型不一致的,就可以使用ValueConverter,它就相當于一個橋,當數據從源到目標控件時,需要走Convert方法,我們在這個方法里邊就可以自定義轉換邏輯,當數據從目標控件到源時,需要走ConvertBack方法,我們可以在這里邊自定義回轉邏輯。

????上述代碼中,我就實現了Button的Visibility屬性和bool之間的轉換,下面我們需要將這個類作為資源,載入XAML頁面,讓Button使用,代碼如下:

<Window.Resources><ResourceDictionary><local:BoolToVisibilityConvert x:Key="B2V" /></ResourceDictionary> </Window.Resources>

????這個ValueConverter類的命名空間就是當前項目的命名空間,所以直接使用local即可,local是默認代表當前代碼的命名空間簡稱,具體相關XAML命名空間的知識參見前文:剖析XAML語言。

??? XAML代碼如下:

<StackPanel><CheckBox x:Name="CB" Click="CheckBox_Click" /><ButtonContent="{StaticResource show}"Style="{StaticResource styleShow}"Visibility="{Binding ElementName=CB, Path=IsChecked, Converter={StaticResource B2V}}" /> </StackPanel>

????程序運行效果如下:

? ? ? ?最后來解釋一下轉換方法的四個參數,第一個就是數據,我們要轉換的值就是它,第二個參數是目標類型,當從bool轉換為Visibility時,這個參數就是Visibility,反之則是bool,第三個參數是轉換參數,可以在標記擴展中定義,第四個是文化參數,也是可以在擴展標記中定義,詳見如下:

Visibility="{Binding ElementName=CB, Path=IsChecked, Converter={StaticResource B2V},ConverterParameter=true,ConverterCulture=zh-CN}"

?????第三個參數主要是提供一些轉換上的輔助,帶給我們用于轉換的更多的信息,第四個我個人理解多用在國際化上,我們可以根據這個參數獲取當前的語言環境,這兩個都不是擴展屬性,都不能使用標記擴展。

本節到此結束,喜歡就點個在看吧...

總結

以上是生活随笔為你收集整理的Binding(三):资源和ValueConverter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。