PopUp窗口WPF表单自定义控件内容

时间:2012-08-23 10:50:34

标签: c# wpf

我在WPF中完成了一个表单,它已经有一个名为RateView的自定义控件。这个自定义控件有4个文本框(它们都应该正常工作)。它还包含一个按钮。

我有一个名为Extended Margin Info的第二个自定义控件,它还有一个只显示输出数据的XAML表单。

如何通过单击名为Rateview的自定义控件上的按钮,将XAML画布调到我的扩展信息XAML的主窗口,每次都在相同的位置?速率视图控制在主窗口上存在5次,因此在点击时将有5个按钮,每次使用extendedmargin信息的内容时,需要将弹出的ExtendedMargin Info输出到主屏幕的相同位置。

2 个答案:

答案 0 :(得分:1)

单击按钮时,应调用Command更新Property某个ViewModel,该ViewModel会公开您要显示的当前ExtendedMarginInfo的ViewModel。然后,您可以将此属性绑定到目标视图中Content Property的{​​{1}}。您可以使用ContentControl属性选择要View显示的Control

答案 1 :(得分:0)

我想你想要显示一个弹出窗口,并改变它的内容放置不同的控件。

在1st创建自定义控件:

balloon = new LogEntryInfoBalloon();
        balloon.SetMainWindow(this);
        balloon.DataContext = vm.NotificationViewModel;

然后创建Popup控件(System.Windows.Controls.Primitives):

localPop = new Popup();
        localPop.AllowsTransparency = true;
        localPop.Placement = PlacementMode.AbsolutePoint;
        localPop.StaysOpen = true;
        localPop.PlacementTarget = this;
        localPop.Child = balloon;

展示位置指向MainWindow。

定义将关闭(隐藏)气球的计时器:

localPopTimer = new Timer(new TimerCallback(CloseLocalPopup));

关闭功能:

private void CloseLocalPopup(object args)
    {
        var act = new Action(() =>
        {
            localPop.IsOpen = false;
        });
        Dispatcher.BeginInvoke(act, null);
    }

显示气球代码如下所示:

private void ShowNotifyBaloon(NotifyBaloonViewModel vm)
    {
        var act = new Action(() =>
        {
            localPop.IsOpen = true;
            localPopTimer.Change(4000, Timeout.Infinite);
        });
        Dispatcher.BeginInvoke(act, null);
    }