情况看起来像这样:
我使用图标作为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图像,它们会改变大小(取决于它们有多少地方)?
答案 0 :(得分:3)
是的,可以将.ico文件添加为DynamicResource
(当然,因为它是一种资源,它必须有x:Key
)。
然而,它们不会自动改变大小。每个大小都可以从像这样的.ico中提取出来,其中我为每个图标的帧设置Image
,设置为帧的确切大小,然后将Image
添加到{{1}调用StackPanel
:
imageStack
当您直接使用.ico时,它将选择具有最大像素分辨率的帧,并根据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 );
}
控件的大小调整该位图的大小,或者为适当的内容对齐/大小调整属性调整大小您的Image
,Image
或其他正在显示它的控件。
用于控制添加哪些框架不完整的一些选项,但可以作为解决方案的想法:
Button
,然后使用BitmapFrames
,ResourceDictionary
等密钥将其添加到'MyIcon16'
。'MyIcon32'
或MarkupExtension
以提取符合某些条件(如索引或尺寸)的框架。IValueConverter
,因此您可以随时更改与特定资源键关联的帧。DynamicResource
将32x32帧作为Window
的{{1}}中的资源,并将64x64帧作为具有相同密钥的64x64帧在不同的范围内,例如作为ResourceDictionary
内的'MyIcon'
。在Grid
中使用Window
的任何内容都会显示64x64帧,而窗口中的其他内容则显示32x32帧。