如何以编程方式从Window.Resources向x:Array添加新项目

问题描述 投票:1回答:1

我有这个XAML代码:

<Window.Resources>
    <x:Array x:Name="arrayXAML" x:Key="WordList" Type="sys:String">
      <sys:String>Abraham</sys:String>
      <sys:String>Xylophonic</sys:String>

      <sys:String>Yistlelotusmoustahoppenfie</sys:String>
      <sys:String>Zoraxboraxjajaja</sys:String>
    </x:Array>
</Window.Resources>

我知道我可以通过这两行c#访问这个数组:

Object res1 = this.Resources["WordList"];
wordList = this.FindResource("WordList") as string[];

但是,如果我想以编程方式向x:Array添加新字符串呢?

我尝试过:arrayXAML.Items.Add("hello");但是当我使用如上所示的“FindRescource”时它似乎不起作用。有没有办法向这个数组添加项目?

c# wpf
1个回答
1
投票

在XAML中,x:ArrayArrayExtension类表示。

请参阅x:Array上的MSDN

在.NET Framework XAML Services实现中,此标记扩展的处理由ArrayExtension类定义。

重要的是要明白,你所拥有/来自你的ResourceDictionary的不是ArrayExtension而是string[]。 因此arrayXAML上的运行时更改你不会在ResourceDictionary中看到。

你不能将新元素添加到string[],请参阅link,但你可以在ResourceDictionary中为关键WordList设置新值:

var sarr = this.Resources["WordList"] as string[];
var newSarr = new string[sarr.Length+1];
for (int i = 0; i < sarr.Length; i++)
{
    newSarr[i] = sarr[i];
}

newSarr[newSarr.Length-1] = "New string from code behind";          
this.Resources["WordList"] = newSarr;

备注:由于您正在修改资源,何时使用qazxsw poi:

DynamicResource
© www.soinside.com 2019 - 2024. All rights reserved.