我正在尝试创建一个扩展的ToolBar控件,用于模块化应用程序,该控件可以从多个数据源加载其项(但这不是我现在要解决的问题,现在我希望它在作为WPF中常规ToolBar时能够工作)。
简而言之:我希望ToolBar的项能够绑定到tb:ToolBar的父级。 我有以下XAML代码:
<Window Name="myWindow" DataContext="{Binding ElementName=myWindow}" >
<DockPanel>
<tb:ToolBar Name="toolbar" DockPanel.Dock="Top" DataContext="{Binding ElementName=myWindow}>
<tb:ToolBar.Items>
<tb:ToolBarControl Priority="-3">
<tb:ToolBarControl.Content>
<StackPanel Orientation="Horizontal">
<TextBlock>Maps:</TextBlock>
<ComboBox ItemsSource="{Binding SomeProperty, ElementName=myWindow}">
关于类型的一些信息:
tb:ToolBar
是一个具有依赖属性Items
,类型为FreezableCollection<ToolBarControl>
的UserControl
。tb:ToolBarControl
是一个具有与 ContentControl's template 几乎相同的模板的UserControl
。
问题是在 ComboBox
中绑定失败(通常会出现“找不到引用的绑定源”),因为其 DataContext 为空。
为什么?
编辑:这个问题的核心是“为什么 DataContext 没有被继承?”,没有它,绑定就无法工作。
编辑2:
这里是 tb:ToolBar
的 XAML:
<UserControl ... Name="toolBarControl">
<ToolBarTray>
<ToolBar ItemsSource="{Binding Items, ElementName=toolBarControl}" Name="toolBar" ToolBarTray.IsLocked="True" VerticalAlignment="Top" Height="26">
编辑3:
我发布了一个有效和无效的示例:http://pastebin.com/Tyt1Xtvg
感谢您的回答。