gpt4 book ai didi

wpf - 为什么允许 ImageSource 作为 WPF 资源?

转载 作者:行者123 更新时间:2023-12-04 14:29:48 25 4
gpt4 key购买 nike

为什么 ResourceDictionary 中的这一行不会导致编译错误?

<Window.Resources>
<ResourceDictionary>
<ImageSource x:Key="aKey">SomePath</ImageSource>
</ResourceDictionary>
</Window.Resources>

我的理解是,这将导致使用默认构造函数创建 ImageSource 实例。然后设置所有指定的属性。

然而 ImageSource 是一个抽象类 - 那么为什么这不会导致编译错误?

最佳答案

试试这个 XAML:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ResourceDictionary>
<Window x:Key="aKey">BlogHeader.jpg</Window>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Image Source="{StaticResource aKey}"/>
</Grid>
</Window>

它编译得很好,但是当你运行它时,你会得到一个运行时 XamlParseException:

无法将属性“Source”中的值转换为“System.Windows.Media.ImageSource”类型的对象。

如果您尝试使用简单类型而不是 Window , 例如:
public class SomeType
{
}

你会得到一个编译时错误:

元素类型 'WpfApplication1.SomeClass' 没有关联的 TypeConverter 来解析字符串 'BlogHeader.jpg'

所以答案在于 TypeConverterImageSource 提供这是 ImageSourceConverter .奇迹发生在 ImageSourceConverter.ConvertFrom它接受一个字符串,创建一个 Uri从中,并使用 BitmapFrame.Create创建一个 BitmapFrame源自 ImageSource .

请注意,我使用了 Window在第一个示例中仅使用从字符串提供类型转换器的类型。

关于wpf - 为什么允许 ImageSource 作为 WPF 资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com