xaml更改图像源

时间:2014-01-22 15:13:23

标签: c# image xaml

在c#中,我正在使用xaml设计器创建一个应用程序。

问题:如果我将图像来源改变为另一种图像来源,没有出现:那么,如果图像已经定义,它会变为“无效”(无图像)

我使用了一种方法(我在网上找到)将图像源(字符串)更改为图像(对象)。

我已经多次尝试通过将xaml中的imagesource更改为另一个图像(我放入项目中)来更改某些xaml图片的图像源,但不幸的是,当我这样做时图像不可见。

我使用的图像和方法如下:

MS-APPX:///Assets/bank_employee.jpg“

imageFromXaml.Source = imgCreatedFromMethod.Source;

private static Image srcToImage(string source)   
{   
        Uri imageUri = new Uri(source);    
        BitmapImage imageBitmap = new BitmapImage(imageUri);   
        Image img = new Image();   
        img.Source = imageBitmap;    
        return img;
}

你们中有谁知道问题是什么吗?

3 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,这对我有用:

            var imageSource = new BitmapImage();
            imageSource.BeginInit();
            imageSource.StreamSource = memoryStream;
            imageSource.CacheOption = BitmapCacheOption.OnLoad;
            imageSource.EndInit();

答案 1 :(得分:0)

您是否尝试将XAML中的源绑定到URI然后更新它?

像这样:

<Image Source="{Binding ImageUri}" />

然后在datacontext中的某个地方有一个属性,如:

public class myClass: INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private Uri imageUri;

    public Uri ImageUri
    {
        get
        {
            return imageUri;
        }
        set
        {
           imageUri = value;
           if(PropertyChanged != null)
           {
               PropertyChanged(this, new PropertyChangedEventArgs("ImageUri"));
           }
        }
    }
}

答案 2 :(得分:0)

您是否确认您的方法确实成功并返回正确的图像源?如果确实如此,那么重新分配Source应该没有问题。如果您将新创建的图像本身加载到UI中,它是否保留其源?

this.Content = imgCreatedFromMethod;  // where "this" is the window

顺便说一下,没有必要实现自己的转换功能。如果你有一个有效的XAML字符串,你可以直接调用XAML解析器用来构建图像源的转换器:

using System.Globalization;
using System.Windows.Media;

string stringValue = ...

ImageSourceConverter converter = new ImageSourceConverter();
ImageSource imageSource = converter.ConvertFrom(
    null, CultureInfo.CurrentUICulture, stringValue);

转换器实例(在这种情况下为ImageSourceConverter)也可以由System.ComponentModel.TypeDescriptor.GetConverter(typeof(TypeToConvertTo))动态检索。

如果您使用TylerD87's answer中的数据绑定,也会自动完成此转换。您还可以查看triggers并按照以下样式定义两个图像:

<Image>
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Source" Value="original path" />
            <Style.Triggers>
                <Trigger ...>
                    <Setter Property="Source" Value="new path" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>