【问题标题】:How does UWP XAML recognize ImageSource conversion from stringUWP XAML 如何识别来自字符串的 ImageSource 转换
【发布时间】:2021-10-25 01:02:12
【问题描述】:

以下是完全有效的 XAML:

<Image Width="50" Height="50" Source="/Assets/StoreLogo.png" />

问题是,UWP 是如何知道将这个字符串转换为ImageSource 的。我期待看到类似IValueConverter 接口或CreateFromString 属性的东西。

但这些是我能看到的唯一属性:

【问题讨论】:

  • 谢谢。但我的问题是特定于 uwp 而不是 wpf
  • 如何隐藏在专有(非开源)XAML 编译器的细节中:)
  • @mm8 在 XAML 解析器/编译器中有哪些属性类型是“某种”特殊情况的列表吗?
  • 我不知道。但是为什么你需要知道这个?这是一个实现细节。

标签: c# xaml uwp uwp-xaml


【解决方案1】:

UWP XAML 如何从字符串中识别 ImageSource 转换

ImageSource是Image控件的依赖属性,表示可以在PropertyChangedCallback方法中将其转换为BitmapImage

当源属性发生变化时,它会调用回调方法,你可以用字符串url制作BitmapImage,如下所示。为了解释这一点,您可以创建一个 custom Dependency 属性。

imageHolder.Source = new BitmapImage(new Uri("ms-appx:///local/test.png"));

依赖关系

public static readonly DependencyProperty UriProperty = DependencyProperty.Register(
  "Uri",
  typeof(String),
  typeof(CustomImage),
  new PropertyMetadata(null,new PropertyChangedCallback(OnUriChanged))
);

请注意图片是密封类型,你不能让一个类派生自它

【讨论】:

  • 依赖属性本身不会告诉 XAML 解析器有关如何将字符串值转换为属性类型的任何信息。我错过了什么吗?
  • 不是开源的,上面的代码是模拟的,请查看上面的OnUriChanged,你可以调用get方法获取uri字符串值,然后转换为BitmapImage进行图像控制。
【解决方案2】:

硬编码的图像路径在编译时会被转换为位图,因此在运行时不会完成 String 到 ImageSource 的转换。对于通过 {x:Bind} 动态指定的路径字符串,UWP 在后面的代码中使用XamlBindingHelper.ConvertValue()(在 obj 文件夹中自动生成 *.g.cs 文件)。也许 XAML 解析器会在内部使用类似的东西。如果您想采用相同的方法,请尝试以下代码:

theImage.Source = XamlBindingHelper.ConvertValue(typeof(ImageSource), "/Assets/StoreLogo.png") as ImageSource;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2019-10-29
    相关资源
    最近更新 更多