繁体   English   中英

如何在 TabItem 更改之前使 Tabcontrol 弹出一条消息

[英]How to make Tabcontrol popup a message before TabItem changed

我在更改 TabItem 时使用 TabControl 的 Selectionchanged 事件的情况下。

我做这样的事情:

tabcntrl.SelectionChanged += new SelectionChangedEventHandler( obj.TabControl_SelectionChanged);
public void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show("check1");
}

我想要的是当我单击要更改的选项卡时,然后在打开选项卡之前它应该打印此 messageBox 并“它与我编写的代码很好地配合”。 但是当我将此代码更改为此时:(它是由 childwindow 制作的我的自定义按钮)

tabcntrl.SelectionChanged += new SelectionChangedEventHandler( obj.TabControl_SelectionChanged);
 public void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
           string msg = "Tab Changed :Save data of MetaviewModel ?";
           CoustomButtonMessage cusButton = new CoustomButtonMessage("Error", msg, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Error);
           cusButton.Show();
        }

此代码首先更改选项卡:切换到另一个选项卡,然后弹出此消息框,而在以前的代码中,它首先弹出 meassgebox,然后切换到另一个选项卡。我想要的是使第二个代码像第一个一样工作.

我的意思是它应该首先弹出第二个代码的消息框,然后它应该切换到另一个标签而不是之前。 (这是因为这个弹出窗口会在进入下一个选项卡之前再次决定是否保存当前选项卡的数据)

How to acheieve this ?

问题是 ChildWindow.Show() 似乎是半模态的,这意味着它会立即返回,但是当窗口实际打开时,它表现为模态窗口 - 即背景中的所有内容都变暗。 要解决此问题,您必须订阅 ChildWindow 的 Closed 事件并仅在触发此事件时执行自定义操作。

在这里,让我向您展示如何做到这一点:

private void Button_Click(object sender, RoutedEventArgs e)
{
    ChildWindow w = new ChildWindow();
    ShowChildWindowAndPerformAction(w,
        () =>
        {
            //put your custom code here that needs to be run when the window is closed
            int i = 5;
        });
}

public void ShowChildWindowAndPerformAction(ChildWindow w, Action action)
{
    EventHandler handler = null;
    handler = (sender2, args2) =>
    {
        w.Closed -= handler;

        action();
    };

    w.Closed += handler;

    w.Show();
}

也许您可以尝试以低线程优先级的异步方式显示消息框,

Dispatcher.InvokeAsync(()=>MessageBox.Show("Test"), DispatcherPriority.Background);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM