xaml中的系统字符串值为StaticResource

时间:2018-01-24 19:48:51

标签: wpf xaml

现在在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>

1 个答案:

答案 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}" />