【问题标题】:What events are fired in the children of a TabView?TabView 的子项中触发了哪些事件?
【发布时间】:2020-03-11 21:28:13
【问题描述】:

我有一个这样的TabView

<TabView ItemsSource="{Binding Documents}">
    <TabView.ItemTemplate>
        <DataTemplate>
             <local:MyUserControl />
        </DataTemplate>
    </TabView.ItemTemplate>
</TabView>

我为MyUserControl.Loaded 事件设置了一个事件处理程序,只是为了看看会发生什么。令人惊讶的是,事件只会触发一次,无论哪个选项卡处于活动状态。当您在选项卡之间切换时,Loaded 事件不会多次触发????

因此,我尝试捕获 Visibily 更改事件(使用 RegisterPropertyChangedCallback 方法)。它从未被解雇!

然后,我想知道在 MyCustomControl每当活动选项卡更改时中是否会触发任何事件,因为 Loaded 和“VisibilityChanged”事件没有被触发?

每当 TabView 活动内容发生变化时,我都需要通过消息总线发送消息,但我需要 MyUserControl 知道变化,因为它是唯一知道在消息中发送什么的人。

【问题讨论】:

  • 检查“SelectionChanged”-Event => docs.microsoft.com/en-us/uwp/api/… 我想这就是你想要的。一旦整个 UI 元素完全加载,Loaded-Event 就会触发...
  • TabView 没有可以绑定的 SelectedItem 吗?然后,您可以在 SelectedItem Document 更改时调用任何方法。
  • 好的,SelectItem 事件的问题是它在孩子的 Loaded 事件被触发之前被触发。此外,正如我所说,我需要拦截正在“激活”的子事件(其内容在每个选项卡开关上可见的事件)以发送一条消息(使用 Messenger 模式),显示“我已被激活” .我终于通过 Twitter 得到了答案,我很快就会在这里发布以更好地说明它。

标签: xaml uwp tabview


【解决方案1】:

我需要拦截正在“激活”的孩子中的一个事件(那个 其内容在每个选项卡开关上都可见)

您可以对local:MyUserControl 使用Tapped 事件,然后使用DataContext 来读取现在点击的项目。 Tapped 将在加载所有事件之前触发。所以这将帮助你拦截孩子被激活。

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 2011-04-24
    • 2013-04-02
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多