【问题标题】:PopUp Window WPF Form Custom Control Content弹出窗口 WPF 表单自定义控件内容
【发布时间】:2012-08-23 10:50:34
【问题描述】:

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

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

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

【问题讨论】:

  • 如果我理解正确,你有不同的按钮,当点击时,应该在另一个控件上显示不同的数据?
  • 我有一个按钮,当点击它时,应该显示另一个自定义控件(画布)。
  • “另一个自定义控件(画布)”是什么意思:它是自定义控件还是画布?你想在哪个容器中显示这个“custom-control-canvas”?

标签: c# wpf


【解决方案1】:

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

【讨论】:

  • 当你这样说的时候,听起来很复杂,嘿嘿,但它是解决他的问题的有效方法。但我不太确定他是否会明白你在说什么。
【解决方案2】:

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

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

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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2019-10-07
    相关资源
    最近更新 更多