我创建了一个从工具栏继承的自定义控件。
我希望工具栏的默认控件模板包含几个默认按钮。
为了实现这一点,我创建了一个静态数组来保存按钮列表:
<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>
工具栏控件具有绑定到文本编辑器的数据上下文,该文本编辑器包括所有命令绑定和布尔依赖属性 ( IsBold
, IsItalic
)。
我将 Toolbar ItemSource 设置为使用这样的数组:
<Setter Property="ItemsSource" Value="{StaticResource toolbarButtons}"/>
现在,当我打开一个在给定运行中首次托管工具栏的窗口时,一切正常。
问题是,当我关闭窗口并重新打开它时,按钮绑定停止工作(IsCheked
属性停止连接到依赖属性)。
我用 snoop 来检查绑定,它说 的值IsChecked
是本地的,这意味着绑定被忽略了。
我怀疑问题是我的数组是静态资源,所以工具栏不时使用相同的实例,这会以某种方式破坏绑定。
我的问题是如何解决这个问题,或者我应该使用不同的方法来实现工具栏的默认按钮?