Динамически изменяемые источники изображений XAML? - PullRequest
0 голосов
/ 08 ноября 2011

Как можно изменить источники изображений в XAML во время выполнения?Прямо сейчас у меня они указывают на встроенный URI ресурса.В модели представления у меня есть элементы управления изображениями, которые определены, но ни к чему не привязаны. Как их получить на виде?

Ответы [ 2 ]

1 голос
/ 08 ноября 2011
       <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();
    }
}
0 голосов
/ 08 ноября 2011

Например, можно использовать конвертер изображений. Если вы установите свойство для привязки, вы можете получить значение из конвертера, а затем вернуть 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);
        }
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...