gpt4 book ai didi

c# - 在 UWP 类库中获取作为资源嵌入的图像 uri 的正确方法

转载 作者:行者123 更新时间:2023-11-30 14:49:59 24 4
gpt4 key购买 nike

我在 UWP 的类库中有一个 UserControl。用户控件将显示 GPS 的信号电平。

我正在使用一个 BitmapIcon 来显示信号电平,它会根据信号电平属性发生变化。我正在使用 BitmapIcon,以便我可以更改主题等的前景色。

无论如何,这是xaml

<BitmapIcon Grid.Column="1" UriSource="{Binding GpsSignalState, Converter={StaticResource SignalImageConverter}}" 
Foreground="{Binding Foreground, ElementName=userControl}"/>

它绑定(bind)到 ViewModel 中的属性,并使用转换器将信号转换为正确的图像。

这是转换器代码。

public object Convert(object value, Type targetType, object parameter, string language)
{
if(value.GetType() != typeof(SignalStrength))
return null;

var signal = (SignalStrength)value;

switch (signal)
{
case SignalStrength.Excellent:
return new Uri("ms-appx:///Assets/Img/Signal-Bars 4.png");
case SignalStrength.VeryGood:
return new Uri("ms-appx:///Assets/Img/Signal-Bars 3.png");
case SignalStrength.Good:
return new Uri("ms-appx:///Assets/Img/Signal-Bars 2.png");
case SignalStrength.Valid:
return new Uri("ms-appx:///Assets/Img/Signal-Bars 1.png");
case SignalStrength.Bad:
return new Uri("ms-appx:///Assets/Img/Signal-Bars 0.png");
default:
throw new ArgumentOutOfRangeException();
}
}

如您所见,图像位于名为 /Assets/Img/ 的文件夹中

图像被设置为构建类型为 Embedded Resource

我想有人可能会问这个,所以程序集名称是 Hardware.Sensors.GPS

我的问题是图像永远不会显示。我没有收到任何错误,我可以在转换器中放置一个断点以使其执行。

我尝试了多种构建 uri 的方法,例如

Uri("/Assets/Img/Signal-Bars 4.png", UriKind.Relative);

Uri("ms-appx:///Assets/Img/Signal-Bars 4.png");

Uri("ms-appx:///Hardware.Sensors.GPS,component;/Assets/Img/Signal-Bars 4.png");

但似乎都不起作用。

有什么想法吗?

最佳答案

其实我觉得这个问题与Build Action无关,你可以将Build Action设置为: enter image description here

我认为问题出在你的图像上,从BitmapIcon class的官方文档可以看出,在“备注”部分:

The file that you use should be a solid image on a transparent background.

我用从 here 下载的一些图片替换了你的图片, 有用。此 BitmapIcon 控件将使用 Foreground 颜色重绘源图像的实心画笔(非透明)填充部分。

因此,第一种方法,您可以替换图像。

第二,我想你可以使用 Image像这样控制:

<Image Grid.Column="1" Source="{Binding GpsSignalState, Converter={StaticResource SignalImageConverter}}" />

Image控件没有Foreground属性,但不代表不能设置Foreground覆盖Image 控件,例如你可以这样做:

<Grid Grid.Column="1">
<Image Source="{Binding GpsSignalState, Converter={StaticResource SignalImageConverter}}" />
<Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Opacity="0.4"
Fill="{Binding Foreground, ElementName=userControl}" />
</Grid>

但这种方法不同于将Foreground属性设置为BitmapIcon,如果你坚持用图像的Foreground颜色替换透明背景,您应该使用 BitmapIcon

关于c# - 在 UWP 类库中获取作为资源嵌入的图像 uri 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com