WPF/XAML提供了许多常用数据类型的类型转换器,如Brush、Color、FontWeight、Point等,它们都是派生自TypeConverter的类(如BrushConverter、ColorConverter等)。它们都能提供自动的类型转换工作,但并不完备,如BitmapImage.UriSource绑定不工作,这时我们必须创建自己的类型转换器。
           对于BitmapImage.UriSource的转换我们可以定义以下转换器UriToImageConverter,并以资源的形式创建和引用。
<local:UriToImageConverter x:Key="LocalUriToImageConverter"/>
当然在XAML文件中,你需要声明新的XML命名空间(通常是在XAML的根元素,如窗口或页面):
xmlns:local="clr-namespace: MyApplicationNamespace "
xmlns:地方=“CLR的命名空间:MyApplicationNamespace”
 
然后,在DataTemplate中(这是有可能在那里你会使用这个),您需要使用转换器
<Image x:Name="imgPhoto" Width="80" Height="60" Grid.Row="0"
Source="{Binding Path=FilenameUri,
Converter={StaticResource LocalUriToImageConverter}}"
>
 
最后,添加下面的C#代码到您的项目
 
   1:      public class UriToImageConverter : IValueConverter
   2:      {
   3:   
   4:          public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
   5:          {
   6:              if (value == null)
   7:              {
   8:                  return null;
   9:              }
  10:   
  11:              if (value is string)
  12:              {
  13:                  value = new Uri((string)value);
  14:              }
  15:   
  16:              if (value is Uri)
  17:              {                
  18:                  BitmapImage bi = new BitmapImage();
  19:                  bi.BeginInit();
  20:                  bi.DecodePixelWidth = 80;
  21:                  //bi.DecodePixelHeight = 60;                
  22:                  bi.UriSource = (Uri)value;
  23:                  bi.EndInit();
  24:                  return bi;
  25:              }
  26:   
  27:              return null;
  28:          }
  29:   
  30:          public object ConvertBack(object value, Type targetType, object parameter, 
System.Globalization.CultureInfo culture)
  31:          {
  32:              throw new Exception("The method or operation is not implemented.");
  33:          }
  34:   
  35:      }
  • 收藏
  • 评论
  • 举报

下一篇:我的友情链接