是的,可以将 .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
,因此您可以随时更改与特定资源键关联的帧。
- 您可以通过范围控制它。您可以将 32x32 帧作为具有key的
Window
's中的资源,并将 64x64 帧作为在不同范围内具有相同键的资源,例如在 that 中。窗口中使用的任何内容都将显示 64x64 帧,而窗口中的其他所有内容都将显示 32x32 帧。ResourceDictionary
'MyIcon'
Grid
Window
{DynamicResource MyIcon}
Grid