【问题标题】:wpf dynamic image loading exceptionwpf动态图片加载异常
【发布时间】:2019-02-19 00:21:22
【问题描述】:

我正在尝试从我的硬盘驱动器(不是项目文件夹)动态加载图像。当我硬编码路径时,图像加载得很好:

<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>

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

【问题讨论】:

  • 不确定是否可以尝试将“\”替换为“\\”,因为这可能是一个字符问题,也请说明您如何在动态示例中填充变量
  • 第一个 xaml 代码片段按预期工作。在第二个中,我使用双斜杠,否则 c# 文件将无法编译。 VC.BACKGROUND... 的路径带有双斜杠。
  • 请告诉我们你是如何初始化这个 VC.BACKGROUND_IMAGE_PATH
  • @DenisSchaf - 我编辑了这个问题。
  • 即使你在 xaml 中的 ImageSource 中输入了一个字符串(文件的路径),它实际上也不是一个字符串 ItemsSource 需要是一个 ImageSource 类型

标签: wpf xaml


【解决方案1】:

试试这个:

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

解释见x:Static Markup Extension中的备注部分:

当您创建不直接属于属性值类型的 x:Static 引用时要小心。在 XAML 处理序列中,来自标记扩展的提供值不会调用额外的值转换。即使您的 x:Static 引用创建一个文本字符串也是如此,并且基于文本字符串的属性值的值转换通常针对该特定成员或返回类型的任何成员值发生。

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

【讨论】:

  • 它有效!!!!你能解释一下为什么绑定语法有效而直接路径无效吗?
  • 当你绑定它时,它会被解释为你直接将它输入到 xaml 并从给定的 Source 中获取一个 BitmapImage。如果您直接将源设置为静态资源,它将按原样使用它并尝试将您的字符串解释为 BitmapImage 什么会失败
  • @nikotromus 你也可以制作 BitmapSource 类型的静态资源来实现这一目标
【解决方案2】:

ImageBrush.ImageSource 不需要字符串 要完成这项工作,您需要创建一个新的 ImageSource

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多