gpt4 book ai didi

wpf - .ico 中的图像作为 DynamicResource

转载 作者:行者123 更新时间:2023-12-02 00:32:16 30 4
gpt4 key购买 nike

情况看起来是这样的:

  • 我在应用程序中有很多图标,它们的大小不一。
  • 例如,我使用图标作为 DynamicResource:

    <igRibbon:MenuTool (...) LargeImage="{DynamicResource IconAdd}" />

    <s:Item (...) Icon="{DynamicResource IconAdd}"/>

  • 部分图标为.xaml格式,部分图标为.png格式

  • 我添加了新的图标,例如: <BitmapImage x:Key="IconAdd" UriSource="../Icons/IconAdd.png" />

问题:
我想要 .ico 格式的图标,我可以将其用作 DynamicResource。

我想要 .ico 格式的图像,因为这种文件格式允许在一个文件中包含几个不同的图像大小。 .xaml 中的图标完全可以调整大小,但加载它们需要很长时间(因为我有很多!)。

是否可以将 .ico 文件添加为 DynamicResource并添加 x:key到吗?
即使我以某种方式添加这些 .ico 图像,它们会改变大小(取决于它们有多少空间)吗?

最佳答案

是的,可以将 .ico 文件添加为 DynamicResource(当然,因为它是资源,所以它必须有一个 x:Key)。

但是,它们不会自动改变大小。每个尺寸都可以像这样从 .ico 中提取,其中我为每个图标的框架制作一个 Image 设置为框架的确切尺寸,然后添加那个 Image 到名为 imageStackStackPanel:

var iconUri = new URI( "pack://application:,,,/MyIcon.ico", UriKind.RelativeOrAbsolute );
var iconDecoder = new IconBitmapDecoder( iconUri,
BitmapCreationOptions.None, BitmapCacheOption.Default );

foreach ( var frame in iconDecoder.Frames ) {
var img = new Image(){
Height = frame.PixelHeight,
Width = frame.PixelWidth,
Source = frame }
imageStack.Children.Add( img );
}

当您直接使用 .ico 时,它将选择具有最大像素分辨率的帧并根据 Image 控件的大小或任何内容对齐/大小调整属性调整该位图的大小用于您的 ImageButton 或其他显示它的控件。

一些用于控制添加哪个框架的选项并不完整,但可以作为解决方案的想法:

  • 以编程方式将图标拆分为 BitmapFrames,并使用 'MyIcon16''MyIcon32' 等键将它们添加到 ResourceDictionary ,等等。
  • 创建一个 MarkupExtensionIValueConverter 以提取符合特定条件(例如索引或大小)的框架。
  • 由于您使用的是 DynamicResource,因此您可以随时更改与特定资源键相关联的框架。
  • 您可以按范围控制它。您可以将 32x32 帧作为 WindowResourceDictionary'MyIcon' 中的资源,并将 64x64 帧作为在不同范围内具有相同键的资源,例如 Window 中的 GridGrid 中使用 {DynamicResource MyIcon} 的任何内容都将显示 64x64 帧,而窗口中的其他所有内容均显示 32x32 帧。

关于wpf - .ico 中的图像作为 DynamicResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6268052/

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