问题标签 [findancestor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
71317 浏览

wpf - WPF 数据绑定的“RelativeSource FindAncestor”究竟是做什么的?

我目前正在使用 WPF 用户控件(我的 XAML 文件的根元素是“UserControl”),我知道它托管在一个窗口中。如何使用数据绑定访问 Window 的属性?

有谁知道为什么简单

不工作?我得到的错误信息是:

System.Windows.Data 警告:4:无法通过引用“RelativeSource FindAncestor,AncestorType='System.Windows.Window',AncestorLevel='1'”找到绑定源。

编辑:我最终使用了 ArsenMkrt 方法的变体,所以接受了他的回答。但是,我仍然有兴趣找出 FindAncestor 不能“正常工作”的原因。

0 投票
1 回答
150 浏览

wpf - Expander.IsExpaned 仅当当前模板是 ToolTip 的后代时

我在我的应用程序中的多个地方使用DataTemplate(a StaticResource),如在 anItemsControlContentControla 中ToolTip

模板包含一个,如果位于 内Expander,我希望它的IsExpanded属性为真。DataTemplateToolTip

有什么建议吗?

0 投票
1 回答
919 浏览

c# - FindAncestor 不适用于 ListView.ItemTemplate 中的 UserControl

尝试将 ItemTemplate 中的 UserControl 的属性与 FindAncestor 模式绑定时遇到一些问题。

我有以下代码:

注释标签行可以正常工作(如果在 ListView 中选择它,则显示 True,否则显示 False)。

问题出在 MyUserControl 上,它不显示任何内容,VS 说:

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“字符串”(HashCode=-1920739956)上找不到“内容”属性。绑定表达式:路径=内容;DataItem='String' (HashCode=-1920739956); 目标元素是'标签'(名称='');目标属性是“内容”(类型“对象”)

MyUserControl 只包含一个绑定到 Content 属性的 Label:

有谁知道为什么 UserControl 的行为与 Label 控件不同?(或者至少可以帮助我看看我明显错过了什么?)

0 投票
3 回答
5416 浏览

wpf - WPF Binding from within a ItemsControl - FindAncestor not working

Good afternoon,

I have what appear to be a very common issue. I have a user control which has a View Model as its data context. Elements within this user control then use this ViewModel for Binding purposes ect.

The ViewModel

My ViewModel contains a single Ticket object. This ticket object has a collection of comments attached to it and these are rendered to the Ticket Display user control using an ItemsControl

You will notice each TextBox rendered by this ItemsControl has a ContextMenu attached to it. What I am trying to do is bind the command of this ContextMenuItem to the DelegateCommand in my ViewModel. Of course, simply using;

We dont get anything useful as 'Binding' in this context equals a Ticket.Comment and thus has no idea what the HideSelectedText actually is.

There seem to be many questions similar to this one and all answers seem to veer towards the RelativeSource solution. As you can see in my original XAML code, I have tried this as well as many other versions of it (with and without AncestorLevel set, with AncestorType={x:Type ItemsControl}, AncestorType={x:Type Window}, AncestorType={x:Type DataTemplate} ect) and ALL produce an output error similar to;

or

So why does this solution seem to work for so many people and yet for me, it makes no difference what so ever from simply typing {Binding HideSelectedText} ?

0 投票
2 回答
998 浏览

wpf - ToolBar 项 DataTemplate 绑定 RelativeSource 搜索未能找到父 ToolBar

我有一个包含按钮的工具栏,一些按钮只有一个图像作为内容,其他按钮只有文本。我正在尝试将按钮图像的宽度属性绑定到我派生的 ToolBar 类上的自定义属性。它有时可以工作,但有时会失败,并出现以下错误:

System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType ='NuiWpfCore.Controls.ToolBar',AncestorLevel ='1''的绑定源。绑定表达式:路径=图标大小;数据项=空;目标元素是'图像'(名称='');目标属性是“宽度”(类型“双”)

这是包含失败的元素绑定的 xaml。DataTemplate 从内联创建的 DataTemplateSelector 返回:

这是 ToolBar 类,其中包含用于绑定的 Source 属性。

此 ToolBar 类有时在 ToolBarTray 中使用,有时则不使用,但在某些情况下,绑定搜索在这两种情况下都会失败。

有没有人知道为什么这可能会失败?

0 投票
1 回答
9529 浏览

wpf - 绑定到模板父级的自定义属性

问:如何从子控件的样式 DataTrigger 绑定到模板父级的自定义属性

几天来,我一直在为这个问题挠头。

我有一个数据绑定 TreeView,它使用具有模板的样式。TreeView 绑定到 ObservableCollection 和 HierarchicalDataTemplate + DataTemplate 绑定到集合项内的属性。

字体组 -> 字体

首先,我尝试绑定如下:

然后我读到这可能行不通,所以我尝试了(包括 AncestorLevel 1+3):

还尝试了 UpdateSourceTrigger=PropertyChanged 和 Mode=TwoWay 的组合

如果这是一个有缺陷的设计,请提出一种方法:我基本上想根据 TreeViewItem 上的 IsItemSelected 属性是否为 true 来更改展开切换按钮的图像——有什么想法吗?

非常感谢您的帮助!

0 投票
1 回答
7613 浏览

c# - 以编程方式创建 RelativeSource FindAncestor 绑定

我正在编写一些以编程方式动态创建绑定的代码,但我似乎无法读取将 RelativeSourceMode 设置为 FindAncestor 的绑定所产生的值。我想知道是否有人使用这种模式成功地在代码(不是 XAML)中创建了 RelativeSource 绑定?

打开绑定跟踪后,警告为:

System.Windows.Data 警告:64:BindingExpression (hash=57957548):RelativeSource (FindAncestor) 需要树上下文

这是创建 RelativeSource 绑定的示例代码:

这是相应的 XAML:

树已加载,因此我可以模拟 FindAncestor 绑定(VisualTreeHelper.GetParent(...)用于定位 FindAncestor 绑定的目标元素,然后对其应用 RelativeSource Self 绑定)但我很好奇为什么这不起作用。

提前致谢!

0 投票
2 回答
657 浏览

silverlight - 如果 DataTemplate 嵌套在另一个 Datatemplate 中,则很难与 parent-template 属性绑定

你知道吗?这个问题在网上已经讨论过很多次了。但我的是一个特例,我仍然没有找到正确的解决方案。

场景:Silverlight 4 - 一个 TreeView,其数据由两个 HierarchicalDataTemplate 显示,一个显示第一级数据(即 TreeView 的父项的数据),一个显示第二级数据(用于子项的数据)项目)。在子项模板中,我必须将控件的可见性绑定到父模板的数据源类的属性。

这是 XAML 代码:

如果是 WPF,我可以写:

可见性 =“{Binding DataContext.Ori, Converter={StaticResource rVisibilityConverter}, RelativeSource={RelativeSource AncestorLevel=2, AncestorType={x:Type TreeViewItem}, Mode=FindAncestor}}”

......它肯定会奏效。但我知道在 Silverlight FindAncestor as binding-mode with RealitiveSource is not supported中。网络中的解决方案都围绕在可视化树的代码隐藏中向下滚动。它是通过 Behavior 还是通过 Attached-Propery 实现的并不重要。解决方案是这样的:

我多次使用这样的解决方案,它们总是有效的。但是在这种情况下,我的 DataTemplate嵌套到另一个 DataTemplate 中,然后,当我在“OnAttached”方法中时,“AssociatedObject”的属性“Parent”什么都没有,然后我没有 Visual-Tree to scroll

你有什么建议吗?先感谢您!皮莱吉

0 投票
2 回答
923 浏览

c# - 无法将可检查的 MenuItem 绑定到父窗口的 Topmost(始终位于顶部)属性

我无法弄清楚我要去哪里错了。希望你们中的一个可以提供帮助。

我有一个包含 TabControl 的窗口。TabControl 有一个 ContextMenu,其中包含一个用于“始终在顶部”行为的可检查项。我想将此可检查项绑定到包含窗口的布尔 Topmost 属性。

无论我做什么,绑定都会失败,并且在调试输出中出现“找不到绑定源”错误。

(这些摘录是从我的实际代码中大大简化的。我希望我没有不小心删掉任何相关的内容。)

首先我尝试了这个:

那没有用。是因为 MenuItem 在窗口“myWindow”内吗?我需要使用 RelativeSource Ancestor 绑定吗?

所以我尝试了这个:

那也没有用。

所以现在我被困住了。如何使此绑定起作用?

注意:我的代码隐藏没有对这些元素做任何事情。我需要设置 Window.DataContext 还是什么?这可能会破坏此窗口的其他部分。

0 投票
1 回答
10229 浏览

wpf - 在 Itemscontrol 数据模板中使用 FindAncestor 在数据模板之外查找文本块

我有一个绑定到对象的 ItemsControl,在 ItemsControl 的数据模板中,我有两个文本块,我想将第一个文本块的文本属性绑定到位于此 ItemsControl 之外的另一个文本块。

我已经尝试在父数据上下文中找到对象,也只是尝试使用 Path=Text 找到 TextBlock

一个例子如下: