更改运行时显示的图像

时间:2016-10-07 12:57:15

标签: c# wpf image xaml

如何更改运行时显示的图像?

我的代码如下:

<Image Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Image.Source>
        <BitmapImage x:Name="Profile"
            DecodePixelWidth="300"
            DecodePixelHeight="300"
            UriSource="/MyAssembly;component/Resources/Profile1.png" />
    </Image.Source>
</Image>

我将要使用的图像基本上是艺术线条,因此使用Image元素直接创建这种缩略图是因为像素调整大小而无法使用。

我需要更改显示的图像,但更改UriSource似乎没有做任何事情,如果我使用图像的来源,它似乎要求我取消整个图像。来源部分。

2 个答案:

答案 0 :(得分:0)

我认为您的UriSource的这种格式可能会更好。

<Image Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Image.Source>
        <BitmapImage x:Name="Profile"
            DecodePixelWidth="300"
            DecodePixelHeight="300"
            UriSource="pack://application:,,,/MyAssembly;component/Resources/Profile1.png" />
    </Image.Source>
</Image>

答案 1 :(得分:0)

使用IValueConverter从路径字符串创建并返回ImageSource。例如;您的图像(desert.jpeg,penguins.jpg)存在于根文件夹的Images文件夹中。确保为图像设置Build Action Type to Content, and Copy To Output Directory to Always

<local:UriToImgConverter x:Key="UriToImgCnvKey"/>

<Image x:Name="ImgCtrl" Source="{Binding Img, Mode=OneWay,Converter={StaticResource UriToImgCnvKey}}"/>

代码:

 ImgViewModel vm1 = new ImgViewModel ( ) ; 
 ImgCtrl.DataContext = vm1;
 vm1.Img = "Images/Desert.jpg";

ViewModel / Converter代码:

    public class ImgViewModel:INotifyPropertyChanged
    {    
        string _path ;
        public string Img {

            get { return _path; }
            set { _path = value; OnPropertyChanged("Img"); }        
        }

        public event PropertyChangedEventHandler PropertyChanged = delegate { };
        public void OnPropertyChanged(string prop)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }

    public class UriToImgConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            BitmapImage img = new BitmapImage(new Uri(value.ToString(), UriKind.Relative));
            BitmapFrame frame = BitmapFrame.Create(img);

            return frame;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }