我正在尝试从硬盘(不是项目文件夹)动态加载图像。当我对路径进行硬编码时,图像加载就很好了:
<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>
当我查看日志并复制编译器说找不到的路径时,它将直接带我到资源。有人知道为什么在尝试动态加载资源时找不到资源吗?
答案 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"));