Wpf 自定义控件';s内容可以';t绑定到控件的父级
我有以下XAML(简化,无结束标记):Wpf 自定义控件';s内容可以';t绑定到控件的父级,wpf,xaml,data-binding,itemtemplate,Wpf,Xaml,Data Binding,Itemtemplate,我有以下XAML(简化,无结束标记): 地图: 但是,组合框的绑定将失败 找不到与绑定的源 参考'ElementName=myWindow' 有关自定义控件的一些事实: tb:ToolBar是UserControl,它包含实际的ToolBar,其中ItemsSource绑定到tb:ToolBar(类型继承IList)的项属性 工具栏的工具栏项目数据模板是从多个数据模板中选择的(根据项目的类型) 属于tb:ToolBarControl的数据模板非常简单-它只包含绑定到tb:ToolBarCo
地图:
但是,组合框
的绑定将失败
找不到与绑定的源
参考'ElementName=myWindow'
有关自定义控件的一些事实:
是tb:ToolBar
,它包含实际的UserControl
,其中ToolBar
绑定到ItemsSource
(类型继承tb:ToolBar
)的IList
项属性
的工具栏
工具栏项目
是从多个数据模板
中选择的(根据项目的类型)数据模板
- 属于
的数据模板非常简单-它只包含绑定到tb:ToolBarControl
的属性tb:ToolBarControl
ContentPresenter
不是出于技术原因tb:ToolBarControl
,它只是UserControl
,具有DependencyObject
对象类型的属性
内容
组合框不能引用窗口
谢谢你的帮助 我在这里遇到了类似的问题:
DependencyObject没有DataContext,我认为这就是绑定不起作用的原因。尝试从FrameworkElement继承,而不是从“DependencyObject”继承。我明白了,但我不能只是将基类型更改为UIElement,因为对于ItemsControl容器类型的已有项,ItemTemplate和ItemTemplateSelector被忽略;键入='ToolBarControl'
。看起来我必须重写数据模板以控制模板:(我根据你的建议改进了我的代码,但它仍然不起作用。我发布了第二个问题:你确定失败来自组合框吗?说的是window不是myWindow,但在错误消息中说'ElementName=myWindow'@Xim这是因为我更改了原始名称。绑定错误指定了它的来源。原始完整错误是“System.Windows.Data错误:4:找不到引用为'ElementName=view2D'的绑定源。BindingExpression:Path=Generator.Maps;DataItem=null;目标元素为'ComboBox'(名称=“”);目标属性为'ItemsSource'(类型'IEnumerable')。是的,“view2D”是窗口的名称。”。
<Window Name="myWindow" DataContext="{Binding ElementName=myWindow}" >
<DockPanel>
<tb:ToolBar Name="toolbar" DockPanel.Dock="Top">
<tb:ToolBar.Items>
<tb:ToolBarControl Priority="-3">
<tb:ToolBarControl.Content>
<StackPanel Orientation="Horizontal">
<TextBlock>Maps:</TextBlock>
<ComboBox ItemsSource="{Binding Generator.Maps, ElementName=myWindow}">