c# – 如何从xaml引用.resx文件内的图标?

前端之家收集整理的这篇文章主要介绍了c# – 如何从xaml引用.resx文件内的图标?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用C# WPF应用程序,使用.resx文件进行资源管理.现在,我试图添加图标(.ico)到项目,但我遇到一些问题.
<Image Name="imgMin" Grid.Column="0"
       Stretch="UniformToFill"
       Cursor="Hand" 
       MouseDown="imgMin_MouseDown">
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Source" Value="\Images\minimize_glow.ico"/>
            <Style.Triggers>
                <Trigger Property="IsMouSEOver" Value="True">
                    <Setter Property="Source" Value="\Images\minimize_glow.ico"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

这很好,但是当我将图标移动到AppResources.resx中时,我遇到了在xaml代码中引用它的问题.我应该使用什么而不是上面的Setter Property = …行?这个:

<Setter Property="Source" Value="{x:Static res:AppResources.minimize}"/>

不行,我想我可能需要使用不同于“Source”的属性,因为Value不是指向图标的字符串,而是现在的图标本身.我不知道使用哪一个 – 有些帮助吗?

解决方法

Source属性不“想要”一个字符串,它只是在它获得一个字符串时转换它.如果您向资源添加图标,那么它将是System.Drawing.Icon类型.您将需要通过转换器将其转换为ImageSource.

您可以静态访问资源,但需要符合x:Static的预期语法.

例如

xmlns:prop="clr-namespace:Test.Properties"
<Image MaxHeight="100" MaxWidth="100">
    <Image.Source>
        <Binding Source="{x:Static prop:Resources.icon}">
            <Binding.Converter>
                <vc:IconToImageSourceConverter/>
            </Binding.Converter>
        </Binding>
    </Image.Source>
</Image>
public class IconToImageSourceConverter : IValueConverter
{
    public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
        var icon = value as System.Drawing.Icon;
        var bitmap = icon.ToBitmap();

        //https://stackoverflow.com/questions/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap/1069509#1069509
        MemoryStream ms = new MemoryStream();
        bitmap.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
        ms.Position = 0;
        BitmapImage bi = new BitmapImage();
        bi.BeginInit();
        bi.StreamSource = ms;
        bi.EndInit();

        return bi;
    }

    public object ConvertBack(object value,System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

笔记:

>资源访问修饰符必须是public>如果图像被添加为“图像”,则最终会出现位图而不是图标,这需要不同的转换器

猜你在找的C#相关文章