情况如下:
<igRibbon:MenuTool (...) LargeImage="{DynamicResource IconAdd}" />
<s:Item (...) Icon="{DynamicResource IconAdd}"/>
<BitmapImage x:Key="IconAdd" UriSource="../Icons/IconAdd.png" />
问题:
我希望有.ico格式的图标可以用作DynamicResource。
我想要.ico中的图像,因为此文件格式允许一个文件包含几个不同的图像大小。 .xaml中的图标可以完全调整大小,但是它们花费了很多时间来加载(因为我确实有很多!)。
是否可以将.ico文件添加为
DynamicResource
并向其中添加x:key
?即使我以某种方式添加了这些.ico图像,它们也会改变大小(取决于它们的位置)吗?
最佳答案
是的,可以将.ico文件添加为DynamicResource
(当然,由于它是一种资源,因此必须具有x:Key
)。
但是,它们不会自动更改大小。每个大小都可以像这样从.ico中提取,在该代码中,我将为每个图标框架设置一个Image
以设置为框架的确切大小,然后将该Image
添加到名为StackPanel
的imageStack
中:
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
控件的大小或Image
,Button
或其他任何适当的内容对齐/大小设置属性来调整位图的大小。显示它的控件。一些控制添加哪个框架的选项虽然不完整,但可以作为解决方案的思路:
BitmapFrames
,然后使用ResourceDictionary
,'MyIcon16'
等键将其添加到'MyIcon32'
中。 MarkupExtension
或IValueConverter
以提取与某些条件(例如索引或大小)匹配的帧。 DynamicResource
,因此您可以随时更改与特定资源密钥关联的帧。 Window
键作为ResourceDictionary
的'MyIcon'
中的资源,并将64x64帧作为资源在不同范围内具有相同键的资源,例如Grid
中的Window
。在{DynamicResource MyIcon}
中使用Grid
的所有内容都会显示64x64帧,而窗口中的所有其他内容都将显示32x32帧。 关于wpf - .ico中的图像作为DynamicResource,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6268052/