现在在xaml中我有sys:String值定义如下。是否可以绑定资源字典中的值。让我们说,我想说{StaticResource Bmp}而不是Bmp(带编码的文本)。 Bmp值来自某些资源。请帮忙。
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<x:Array
Type="{x:Type sys:String}"
x:Key="ImageFormatsArray">
<sys:String>Bmp</sys:String>
<sys:String>Png</sys:String>
<sys:String>Jpg</sys:String>
<sys:String>Tif</sys:String>
<sys:String>Gif</sys:String>
</x:Array>
答案 0 :(得分:0)
是的,你可以。只需使用<sys:String>
引用替换相关的StaticResource
条目:
<sys:String x:Key="BitmapFormat">Bmp</sys:String>
<x:Array x:Key="ImageFormatsArray"
Type="{x:Type sys:String}">
<StaticResource ResourceKey="BitmapFormat" />
<sys:String>Png</sys:String>
<sys:String>Jpg</sys:String>
<sys:String>Tif</sys:String>
<sys:String>Gif</sys:String>
</x:Array>
但是,这仅适用于静态资源;您无法使用绑定或动态资源。这意味着在解析Xaml并创建数组时,资源必须在范围内。
您还可以使用x:Static
引用命名常量:
public static class ImageFormats
{
public const string Bitmap = "Bmp";
}
<x:Array x:Key="ImageFormatsArray"
Type="{x:Type sys:String}">
<x:Static Member="local:ImageFormats.Bitmap" />
<!-- ... more formats -->
</x:Array>
当然,如果你要去那么远,你也可以只对整个列表进行硬编码:
public static class ImageFormats
{
public const string Bitmap = "Bmp";
public const string Png = "Png";
public const string Jpeg = "Jpg";
public const string Tiff = "Tif";
public const string Gif = "Gif";
public static readonly IReadOnlyList<string> AllFormats =
new[] { Bitmap, Png, Jpeg, Tiff, Gif };
}
然后使用x:Static
访问格式列表:
<ComboBox ItemsSource="{x:Static local:ImageFormats.AllFormats}" />