加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:31:37 所属栏目:百科 来源:网络整理
导读:我正在使用C# WPF应用程序,使用.resx文件进行资源管理.现在,我试图添加图标(.ico)到项目,但我遇到一些问题. Image Name="imgMin" Grid.Column="0" Stretch="UniformToFill" Cursor="Hand" MouseDown="imgMin_MouseDown" Image.Style Style TargetType="{x:Ty
我正在使用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="Imagesminimize_glow.ico"/>
            <Style.Triggers>
                <Trigger Property="IsMouSEOver" Value="True">
                    <Setter Property="Source" Value="Imagesminimize_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>如果图像被添加为“图像”,则最终会出现位图而不是图标,这需要不同的转换器

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读