Wpf 静态资源数组绑定仅适用于第一次

Wpf 静态资源数组绑定仅适用于第一次,wpf,binding,resources,wpf-controls,toolbar,Wpf,Binding,Resources,Wpf Controls,Toolbar,我创建了一个从工具栏继承的自定义控件 我希望工具栏的默认控件模板包含两个默认按钮 为了实现这一点,我创建了一个静态数组来保存按钮列表: <x:Array x:Key="toolbarButtons" Type="{x:Type ToggleButton}"> <ToggleButton Content="Bold" Command="{x:Static ns1:EditingCommands.Bold}"

我创建了一个从工具栏继承的自定义控件

我希望工具栏的默认控件模板包含两个默认按钮

为了实现这一点,我创建了一个静态数组来保存按钮列表:

<x:Array x:Key="toolbarButtons" Type="{x:Type ToggleButton}">
        <ToggleButton Content="Bold" 
                      Command="{x:Static ns1:EditingCommands.Bold}"
                      CommandTarget="{Binding}"
                      IsChecked="{Binding IsBold, Mode=TwoWay}"/>
        <ToggleButton Content="Italic" 
                      Command="{x:Static ns1:EditingCommands.Italic}"
                      CommandTarget="{Binding}"
                      IsChecked="{Binding IsItalic, Mode=TwoWay}"/>
</x:Array>
现在,当我打开一个在给定运行中第一次托管工具栏的窗口时,一切都很好

问题是,当我关闭并重新打开窗口时,按钮绑定停止工作(
IsCheked
属性停止连接到dependency属性)

我使用snoop检查绑定,它说,
IsChecked
的值是本地的,这意味着绑定被忽略

我怀疑问题在于我的数组是一个静态资源,所以工具栏不时使用同一个实例,这会破坏绑定


我的问题是如何解决这个问题,或者我应该使用不同的方法来实现工具栏的默认按钮?

我认为问题在于,当您在XAML中声明数组时,它只实例化一次。因此,第二个工具栏(和on)尝试使用完全相同的对象。当它被重用时,您的绑定可能会被覆盖。

您是否尝试将
x:Shared=“False”
添加到数组声明中

<x:Array x:Key="toolbarButtons" x:Shared="False" Type="{x:Type ToggleButton}">

这个数组是在UserControl的XAML中定义的,还是在某个地方(比如Application.Resources)的其他XAML中定义的?如果它在UserControl中,我认为我的答案不正确。如果它在别处,请尝试将其移动到UserControl。尝试将x:Shared=“False”添加到数组声明中。
<x:Array x:Key="toolbarButtons" x:Shared="False" Type="{x:Type ToggleButton}">