[英]WPF Image Binding & Converter Not working
//in xaml
//resource
<local:LocalUriToImageConverter x:Key="MyImageConverter"/>
//datacontext
DataContext="{x:Static local:GlobalData.CustomServiceInfo}"
//image **exception throw at UriSource **
<Image Height="60" Width="60" >
<Image.Resources>
<BitmapImage UriSource="{Binding HeadPicUrl , Converter={StaticResource MyImageConverter}}" x:Key="image1" />
<FormatConvertedBitmap Source="{StaticResource image1}" x:Key="formattedImage" DestinationFormat="Gray32Float" />
</Image.Resources>
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="True">
<Setter Property="Source" Value="{StaticResource image1}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="False">
<Setter Property="Source" Value="{StaticResource formattedImage}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
--------------------------------------------------------------------------
//Code
//model
public class CustomServiceInfo
{
public string Name { get; set; }
public string HeadPicUrl { get; set; }
public bool Status { get; set; }
}
//init
public MainWindow()
{
GlobalData.CustomServiceInfo = new CustomServiceInfo {
Name = "nainaigu",
HeadPicUrl = @"http://avatar.csdn.net/0/5/5/1_haifengzhilian.jpg",
Status = true ,
//Type = new Uri("pack://application:,,,/" + "MahAppsDemo" + ";component/" + "Image/my.jpg", UriKind.RelativeOrAbsolute)
//Type = "pack://application:,,,/" + "MahAppsDemo" + ";component/" + "Image/my.jpg"
};
InitializeComponent();
}
//Custom Coverter
public class LocalUriToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string path = (string)value;
int BytesToRead = 100;
try
{
var image = new BitmapImage();
WebRequest request = WebRequest.Create(new Uri(path, UriKind.Absolute));
request.Timeout = -1;
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
BinaryReader reader = new BinaryReader(responseStream);
MemoryStream memoryStream = new MemoryStream();
byte[] bytebuffer = new byte[BytesToRead];
int bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
while (bytesRead > 0)
{
memoryStream.Write(bytebuffer, 0, bytesRead);
bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
}
image.BeginInit();
memoryStream.Seek(0, SeekOrigin.Begin);
image.StreamSource = memoryStream;
image.EndInit();
return image;
}
catch (Exception)
{
return new BitmapImage();
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
例外msg是{"must set the “UriSource” or “StreamSource”."}
。 在此處輸入圖片說明
我認為轉換並不麻煩,因為我在Convert方法中設置了調試點,但是在此之前拋出了異常。我不知道上面的代碼在哪里出錯。 這是我在stackoverflow中的第一個問題。 請幫助我。謝謝!
子控件在Image.Resources中定義,而不是在Image中定義。 請如下更新xaml代碼:
<Image Width="45" Height="45" x:Name="headPicture" Cursor="Hand" Source="{Binding HeadPicUrl, Converter={StaticResource MyImageConverter}}" >
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="True">
<Setter Property="Source" Value="{StaticResource image1}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="False">
<Setter Property="Source" Value="{StaticResource formattedImage}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.