我有一个用于UWP类库的UserControl。用户控件将显示GPS的信号电平。正确的方式来获取作为UWP类库中的资源嵌入的图像的uri
我使用的是BitmapIcon
,它显示信号电平并根据信号电平属性进行更改。我使用的是BitmapIcon,这样我可以改变前景色为主题等
不管怎么说,这是XAML
<BitmapIcon Grid.Column="1" UriSource="{Binding GpsSignalState, Converter={StaticResource SignalImageConverter}}"
Foreground="{Binding Foreground, ElementName=userControl}"/>
它绑定到财产的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");
但没有似乎工作的各种方式。
任何想法?
他们需要成为“嵌入式资源”的任何特定原因? – AlexDrenea