【发布时间】:2013-10-31 15:13:37
【问题描述】:
我正在尝试从 DataTemplate 中获取我的 SelectedRadioButton。
Wpf Inspector 显示了可视化树:
在代码中:
void menu_StatusGeneratorChanged(object sender, EventArgs e)
{
var status = Menu.Items.ItemContainerGenerator.Status;
if (status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
var item = Menu.Items.ItemContainerGenerator.ContainerFromIndex(0);
// item is a ContentPresenter
var control = Tools.FindChild<SelectedRadioButton>(item);
control = Tools.FindAncestor<SelectedRadioButton>(item);
}
}
item 是一个 ContentPresenter,看 Wpf 检查器的图像,我相信从那里我必须能够到达 SelectedRadioButton。变量control 始终为空。
我在这里想念什么?我使用这些visualtreehelpers。
【问题讨论】:
-
在 WPF 中像这样操作 UI 元素非常罕见。你想做什么?
-
在该方法中设置断点并使用 WPF Tree Virtualizer 在调试器遇到断点的时间点查看 VisualTree。完整的 VisualTree 可能未完全加载,因此 WPF Tree Vitualizer 也会显示为空。如果 Virtualizer 向您显示具体实例,您可能使用 FindChild 错误。查看 WPF Tree Virtualizer blogs.msdn.com/b/zainnab/archive/2010/01/29/… 你可能很不幸,遇到了最坏的情况,即生成器在最后,但尚未执行容器的测量。
-
@HighCore 我想为我的一个自定义控件设置一个属性以进行初始化。但是它们是通过 ItemsControl 中的 DataTemplate 生成的,我找不到访问点。
-
@Gerard 似乎应该通过 DataBinding 来完成。
-
好的,是的,这是一个很好的教程。我不知道那个。 wpf 博士调用 ApplyTemplate();加载并初始化其内部控件。我同意那个教程。呵呵
标签: wpf visual-tree