弹出窗口 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。然后您可以将此属性绑定到目标视图中ContentControl
的Content 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中使用了自定义的控件,请问如何为自定义控件中的一个按钮设置快捷键?