如何显示和隐藏Popup?

时间:2010-10-05 15:51:35

标签: wpf popup

    void Start()
{
System.Windows.Controls.Primitives.Popup p = new System.Windows.Controls.Primitives.Popup();
    p.HorizontalOffset = this.ActualWidth / 2;
    p.Width = 100;
    p.Height = 100;
    p.VerticalOffset = this.ActualHeight / 2;
    DockPanel dock = new DockPanel();
    dock.Children.Add(new Button() { Content = "Обновлено" });
    p.Child = dock;
    p.IsOpen = true;
    Thread t = new Thread(StopPopup);
    t.Start(p);}

功能:

private void StopPopup(object obj)
        {
            try
            {
                System.Windows.Controls.Primitives.Popup p = (System.Windows.Controls.Primitives.Popup)obj;
                this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
                {
                    dataGrid1.DataContext = DataSetCreator.AllItems();
                    Thread.Sleep(1500);
                    p.IsOpen = false;

                }));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

但为什么这个代码被触发一次=(             }

2 个答案:

答案 0 :(得分:0)

看起来您正在尝试从非UI线程显示控件,而不是以任何方式将其连接到应用程序UI(据我所见)。需要在UI线程上创建和操作WPF UI元素,并且需要与某些基于Window的控件相关联才能进行渲染。

答案 1 :(得分:0)

除了John所说的,我还建议您查看Modeless对话框。在对话框上调用Show()时,该方法立即返回。这允许应用程序继续,而不是等待对话框的响应。您还可以附加到按钮的单击事件,以便您知道何时单击该按钮。