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

Posted

技术标签:

【中文标题】弹出窗口 WPF 表单自定义控件内容【英文标题】:PopUp Window WPF Form Custom Control Content 【发布时间】: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”? 【参考方案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);
    

【讨论】:

以上是关于弹出窗口 WPF 表单自定义控件内容的主要内容,如果未能解决你的问题,请参考以下文章

wpf怎么自定义窗口

我在wpf中使用了自定义的控件,请问如何为自定义控件中的一个按钮设置快捷键?

具有默认内容的 WPF 自定义网格

我的 WPF 自定义控件 Datacontext 正在取代父母

如何在VS2010 WPF设计器中控制自定义控件的默认属性

[WPF自定义控件库]为Form和自定义Window添加FunctionBar