0
运行期间XAML中的图像源如何更改?现在我让他们指向一个嵌入式资源URI。在视图模型中,我定义了图像控件但没有绑定任何东西,我如何在视图中获取这些控件?动态更改XAML图像源?
运行期间XAML中的图像源如何更改?现在我让他们指向一个嵌入式资源URI。在视图模型中,我定义了图像控件但没有绑定任何东西,我如何在视图中获取这些控件?动态更改XAML图像源?
例如,可以使用imageconverter。 如果您将属性设置为绑定,则可以从转换器获取值,然后返回BitmapSource进行绑定。
public sealed class ImageConverter : IValueConverter
{
internal static class NativeMethods
{
[DllImport("gdi32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteObject(IntPtr hObject);
}
public BitmapSource ToBitmapSource(System.Drawing.Bitmap source)
{
BitmapSource bitSrc = null;
var hBitmap = source.GetHbitmap();
try
{
bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
catch (Win32Exception)
{
bitSrc = null;
}
finally
{
NativeMethods.DeleteObject(hBitmap);
}
return bitSrc;
}
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// call function to get BitmapSource
using (Bitmap bitmap = new Bitmap("{image path}"))
{
return ToBitmapSource(bitmap);
}
}
}
<Image x:Name="UserImage" Source="{Binding MembershipUserViewModel.UserId, Converter={StaticResource _userIdToImageConverter}, UpdateSourceTrigger=Explicit}" Stretch="Fill" />
public class UserIdToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var image = String.Format("{0}/../{1}.jpg",
Application.Current.Host.Source,
value);
var bitmapImage = new BitmapImage(new Uri(image)){CreateOptions = BitmapCreateOptions.IgnoreImageCache};
return bitmapImage;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
http://stackoverflow.com/questions/2531539/wpf-databind-image-source-in-mvvm – kenny
他们的解决方案使用其要求限定的所有URI DataTriggers在XAML中,有没有一种方法可以将我的ViewModel中的Image控件绑定到视图,以便View不关心图像的来源?谢谢。 – TheWolf