0

我有一个TabControl包含棱镜区域。我想为某些事件触发某种通知(例如闪烁选项卡标题),并且我想从 Prism 区域中的组件触发此通知。

一旦包含此类组件的选项卡打开一次,它就可以很好地使用VisualTreeUtil.GetParent()并向上运行,直到我找到我的TabControl并可以对其进行修改以指示通知。

但问题是这在用户打开选项卡之前不起作用,因为VisualTreeUtil.GetParent()返回 null;显然是因为 Prism 直到那时才连接视觉树。

调用包含UpdateLayout()TabItem区域并没有帮助。我不想以编程方式打开 TabItems,因为这会使用户感到困惑。

除了实施一种区域注册表(这会相当丑陋且难以维护)之外,我还能做些什么吗?

如果您想查看代码,我编写了一个最小的解决方案来演示该问题。Print Structure按钮尝试从第二个选项卡上的(最初未渲染的不可见的)hello TextBlock 向上移动可视化。在您切换到选项卡之前,它只打印 TextBlock,然后您会到达可视树的根目录。这就是我想要在不切换到选项卡的情况下完成的任务。

4

2 回答 2

1

添加评论作为答案:

这可能不是您正在寻找的答案,但似乎您正在采取一种非常程序化的方法。

您是否考虑过使用 MVVM 方法?每个都TabItem可以TabControl有一个HeaderTemplate。在模板中,您可以绑定到 ViewModel 中的属性,该属性会导致选项卡闪烁或更改外观

于 2012-08-10T15:29:03.307 回答
0

嗯.. IIRC Prism 区域只是一个配置的 ContentControl/ContentPresenter。一旦它们准备好工作,所有的绑定和数据模型都应该就位,但是树没有被创建,因为它们是不可见的。如果是这样,您应该能够在它们上调用 ApplyTemplate() 来强制它。但是,我不记得 Prism 是否在初始化时或按需分配内容模板/数据上下文 - 后者可能会导致调用 ApplyTemplate 无用。

于 2012-08-10T10:02:59.837 回答