不要使用Properties.Resources
Windows 窗体嵌入式资源,而是使用 WPF 资源。在解决方案资源管理器中,单击图像文件,然后在属性窗口中,将其构建操作设置为资源(不是嵌入式资源)。这也将图像嵌入到程序集中,但方式不同。
与 Windows 窗体不同,WPF 不会生成资源管理器类,因此您必须使用字符串来动态加载图像:
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri("pack://application:,,,/NameOfAssembly;component/Path/To/Image.png");
image.EndInit();
请注意 URI 的application
和component
部分是常量字符串,而NameOfAssemly
是图像所在程序集的名称。您可以构建一个帮助类来构建 URI 并加载图像。
image.Freeze()
如果您不打算对图像进行任何更改(提高性能并允许在非 UI 线程上创建图像源),您也可以调用。
在您的数据类中,公开一个ImageSource
属性而不是Image
. 然后你使用Image
控件来显示它:
<Image Source="{Binding Icon}" />
或在样式内:
<Style TargetType="MenuItem">
<Style.Resources>
<Image x:Key="Icon"
x:Shared="False"
Source="{Binding Icon}"
Width="16"
Height="16" />
</Style.Resources>
<Setter Property="Icon" Value="{StaticResource Icon}" />
</Style>