wpf动态图像加载异常

时间:2019-02-18 15:42:59

标签: wpf xaml

我正在尝试从硬盘(不是项目文件夹)动态加载图像。当我对路径进行硬编码时,图像加载就很好了:

<Border>
    <Border.Background>
        <ImageBrush ImageSource="C:\Program Files\my program\Working Assets\Logos\background.jpg" />
    </Border.Background>

但是,当我尝试动态加载图像时,找不到该路径。

c#文件:

public static string BACKGROUND_IMAGE_PATH = "C:\\Program Files\\my program\\Working Assets\\Logos\\background.jpg"; 

xaml:

xmlns:localVariables =“ clr-namespace:my_namespace.StaticResources”>

     <Border BorderBrush="{Binding ColorsBo.BorderColor, FallbackValue='Black'}">
            <Border.Background>
                <ImageBrush ImageSource="{x:Static localVariables:VC.BACKGROUND_IMAGE_PATH}" />
            </Border.Background>

当我查看日志并复制编译器说找不到的路径时,它将直接带我到资源。有人知道为什么在尝试动态加载资源时找不到资源吗?

2 个答案:

答案 0 :(得分:1)

尝试一下:

<ImageBrush ImageSource="{Binding Source={x:Static localVariables:VC.BACKGROUND_IMAGE_PATH}}" /> 

有关说明,请参见x:Static Markup Extension中的“备注”部分:

  

在进行x:Static引用而不直接是属性值的类型时,请小心。在XAML处理序列中,标记扩展提供的值不会调用其他值转换。即使您的x:Static引用创建了文本字符串,也是如此,并且对于该特定成员或返回类型的任何成员值,通常都会基于文本字符串对属性值进行值转换。

与上述相反,内置的自动类型转换(例如,从字符串到ImageSource)将应用于由Binding产生的值。

答案 1 :(得分:-1)

ImageBrush.ImageSource不需要字符串 为此,您需要创建一个新的ImageSource

public static ImageSource BACKGROUND_IMAGE_PATH = new BitmapImage(new Uri("C:\\Program Files\\my program\\Working Assets\\Logos\\background.jpg"));