自定义控件的内容无法绑定到控件的父级

发布于 2024-10-19 14:27:31 字数 1493 浏览 2 评论 0原文

我有以下 XAML(简化,没有结束标签):

<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}">

但是 ComboBox 的绑定将失败

找不到绑定源 参考'ElementName=myWindow'

有关自定义控件的一些事实:

  • tb:ToolBarUserControl,其中包含实际的 ToolBarItemsSource 绑定到 tb:ToolBarItems 属性(继承 IList 的类型)。

  • ToolBarToolBarItem DataTemplate 是从多个 DataTemplate 中选择的(根据item)。

  • 属于tb:ToolBarControl的DataTemplate非常简单 - 它只包含绑定到tb的属性ContentContentPresenter :ToolBarControl.

  • tb:ToolBarControl 不是出于技术原因 UserControl,它只是 DependencyObject ,其属性为 Content 类型object.

为什么ComboBox不能引用Window

感谢您的帮助!

I have following XAML (simplified, no ending tags):

<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}">

But the ComboBox's binding will fail with

Cannot find source for binding with
reference 'ElementName=myWindow'

Some facts about the custom controls:

  • tb:ToolBar is UserControl which contains actual ToolBar with ItemsSource bound to the Items property of the tb:ToolBar (of type inheriting IList).

  • The ToolBar's ToolBarItem DataTemplate is chosen from several DataTemplates (according to the type of the item).

  • The DataTemplate belonging to the tb:ToolBarControl is very simple - it just contains ContentPresenter bound to property Content of the tb:ToolBarControl.

  • tb:ToolBarControl is not for technical reasons UserControl, it is just DependencyObject with property Content of type object.

Why can't the ComboBox reference the Window?

Thanks for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凹づ凸ル 2024-10-26 14:27:31

我在这里遇到了类似的问题:

Bindings on child dependency object用户控件不起作用

DependencyObject 没有 DataContext,我认为这就是绑定不起作用的原因。不要从“DependencyObject”继承,而是尝试从 FrameworkElement 继承。

I had a similar problem here:

Bindings on child dependency object of usercontrol not working

DependencyObject doesn't have a DataContext and I think that's why the binding doesn't work. Instead of inheriting from 'DependencyObject' try inheriting from FrameworkElement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文