WPF中StringToImage和BoolToImage简单用法
?
在WPF的綁定控件操作中,經常會通過bool值或者某些特定的string值做出相應動作。但UI層控件的很多屬性對應的都不是Bool值或者對應的只是固定的String值。
這個時候有兩方法解決該問題。
1.是在后臺cs中做出比較判斷,然后根據相應結果傳達UI層做出相應動作。
2.是直接在UI界面寫好,然后會自行根據傳入值做相應動作。
本文主要講第二種方法。Demo在結尾會附上。
一.基類,判斷類代碼(Bool篇)
public class BoolToValueConverter<T> : IValueConverter{public T FalseValue { get; set; }public T TrueValue { get; set; }public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){if (value == null)return FalseValue;elsereturn (bool)value ? TrueValue : FalseValue;}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){return value != null ? value.Equals(TrueValue) : false;}}
新建個類繼承自IValueConverter,并將其繼承方法名寫出來(Convert和ConvertBack),這兩個方法是邏輯判斷的主要代碼。Convert是將傳入值做出判斷和返回相應結果,此處是TrueValue或FalseValue。ConverBack是將返回結果反轉換回來,本文并沒有用到這個。
?
二.新建個實用類
public class BoolToBitmapImageConverter : BoolToValueConverter<BitmapImage> { }該類繼承BoolToValueConverter<T>,因為Demo轉換的是圖片所以類型是BitmapImage。
三.UI布置
?
<Window.Resources><view:BoolToBitmapImageConverter x:Key="boolImgConv" ><view:BoolToBitmapImageConverter.TrueValue><BitmapImage UriSource="Resource/Status-True.png" /></view:BoolToBitmapImageConverter.TrueValue><view:BoolToBitmapImageConverter.FalseValue><BitmapImage UriSource="Resource/Status-False.png" /></view:BoolToBitmapImageConverter.FalseValue></view:BoolToBitmapImageConverter></Window.Resources><StackPanel Width="260"><Image Height="40" Source="{Binding BoToIma, Converter={StaticResource boolImgConv}}" /><Button Content="True" Height="100" Click="ButtonTrue"/><Button Content="False" Height="100" Click="ButtonFalse"/></StackPanel>Source中BoToIma是綁定傳入的數據,然后通過轉換器Converter轉換,轉換顯示結果在Key是boolImgConv中做圖片綁定,在Window.Resource里設置True或False的綁定圖片。
?
四.StringToImage簡單聊聊
StringToImage和BoolToImage差不多,只是在Convert和ConvertBack中的邏輯判斷做的相對細致些,比如:傳入值“X”拋出值"Y",傳入值“XX”拋出值"YY",傳入值“XXX”拋出值"YYY"等等,做個IF判斷或者Switch判斷即可。
算了,貼代碼說話,語文不好是個硬傷。
public class StringToImageSourceConverter : StringToValueConverter<ImageSource> { }public class StringToValueConverter<T> : IValueConverter{public ImageSource NormalValue { get; set; }public ImageSource CrestronErrorValue { get; set; }public ImageSource EncErrorValue { get; set; }public ImageSource AllErrorValue { get; set; }public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){string key = value == null ? null : value.ToString();if (string.IsNullOrEmpty(key) || key == "00"){return NormalValue;}else if (key == "01"){return CrestronErrorValue;}else if (key == "10"){return EncErrorValue;}else{return AllErrorValue;}}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){if (value == null || value.Equals(NormalValue)){return "00";}else if (value.Equals(CrestronErrorValue)){return "01";}else if (value.Equals(EncErrorValue)){return "10";}else{return "11";}}}?先定義四種狀態,然后做if判斷。新建類繼承該類,完活,太細致的我也不懂。。。。
? UI層:Windows.Resource里設置綁定屬性
五.Demo附上
?
六.寫的都是自己遇到的問題和見解,有錯歡迎糾正,輕噴輕拍,非常感謝
轉載于:https://www.cnblogs.com/Khan-Sadas/p/4950573.html
總結
以上是生活随笔為你收集整理的WPF中StringToImage和BoolToImage简单用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HttpsURLConnection 返
- 下一篇: SqlServer自定义聚合函数