WPF,检测您正在从哪个选项卡导航

Posted

技术标签:

【中文标题】WPF,检测您正在从哪个选项卡导航【英文标题】:WPF, detect which Tab you are navigating AWAY from 【发布时间】:2014-12-23 14:35:12 【问题描述】:

我有一个带有多个选项卡的 WPF 应用程序。在每个选项卡下,用户可以更改一些设置(使用复选框、文本框等),然后用户必须单击“更新”按钮才能保存这些设置。一切正常,但其中一项要求是在用户尝试切换到其他选项卡而不单击“更新”按钮时提醒用户。 所以我正在尝试使用

TabItem_LostFocus

事件处理程序来实现它,但每次我单击选项卡中的某些内容时都会触发此事件。我想我可以通过放置来解决这个问题

e.Handled = true

对于我拥有的每个控件,但这听起来不像是一个优雅的解决方案(尤其是当我的选项卡下的所有内容都没有单击事件处理程序时)。是否有其他方法可以确定您何时从当前选项卡切换? 谢谢

【问题讨论】:

如果用户没有在您的弹出窗口中单击“确定”,您是否要阻止他们导航离开该选项卡? 我想阻止用户离开选项卡,直到他使用选项卡保存更改(通过单击更新按钮)我想我得到了我正在寻找的答案。但是,如果您有更优雅的解决方案,请分享:) 谢谢 【参考方案1】:

要满足您的要求,您只需要将数据绑定到TabControl.SelectedIndexTabControl.SelectedItem 属性:

<TabControl ItemsSource="Binding TabItemCollection" 
    SelectedItem="Binding SelectedTabItem" />

然后在你的视图模型或代码后面:

private YourDataType selectedItem;
public YourDataType SelectedItem

    get  return selectedItem; 
    set
    
        // selectedItem represents the previous TabItem
        // value represents the new TabItem
        selectedItem = value;
    

【讨论】:

谢谢!这正是我所需要的!我会给你一个投票,但我没有学分 LOL 请查看 Stack Overflow 帮助中心的 What should I do when someone answers my question? 页面。【参考方案2】:

您可以绑定到每个 TabItem.. 的 IsSelected 属性,然后在 setter 中进行检查

<TabControl>
    <TabItem IsSelected="Binding TabItem1IsSelected"/>
</TabControl>

属性:

public bool TabItem1IsSelected

    get  return _tabItem1IsSelected; 
    set
    
        if (_tabItem1IsSelected)
        
            if (!value)
            
                // Check to see if user has updated

                if (!userUpdated)
                
                    value = true;
                
            
        

        _tabItem1IsSelected = value;
        RaisePropertyChanged();
       

【讨论】:

谢谢!这比我想象的要简单得多。我是 WPF/Binding 概念的新手

以上是关于WPF,检测您正在从哪个选项卡导航的主要内容,如果未能解决你的问题,请参考以下文章

WPF 选项卡键导航

WPF - Prism 7.1 - 导航 - 掌握选项卡控件 - 模态/对话框窗口

导航选项卡或部分视图哪个更好?

WPF:如何在不禁用箭头键导航的情况下禁用选项卡导航?

WPF 选项卡控件样式

在默认 AppDomain 中的 Winforms 中托管 WPF 用户控件的弹出窗口中的选项卡导航损坏