0

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

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

如何通过单击名为 Rateview 的自定义控件上的按钮将 XAML 画布显示到扩展边距信息 XAML 的主窗口中,每次都在同一位置?Rateview控件在主窗口中存在5次,因此将有5个按钮,当点击时,每次都需要将ExtendedMargin Info的弹出窗口与extendedmargin info的内容输出到主屏幕的相同位置。

4

2 回答 2

2

单击时,您的按钮应调用Command更新某些 ViewModel 的 a ,该 ViewModel 公开您要显示Property的当前的 ViewModel 。ExtendedMarginInfo然后您可以将此属性绑定到目标视图Content Property中的 a ContentControl。您可以使用该属性选择View要显示的内容。ControlContentControl.ContentTemplateSelector

于 2012-08-23T11:25:52.480 回答
0

我猜您想显示一个弹出窗口并更改其内容,并将其放置在不同的控件中。

首先创建您的自定义控件:

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);
    }
于 2012-08-23T11:47:17.860 回答