【发布时间】:2013-07-10 05:10:30
【问题描述】:
我正在编写的应用程序中有一个侧边栏,它向用户显示有关应用程序状态的信息。在某些情况下,用户可以将鼠标悬停在侧边栏中的各种元素上以查看更具体的详细信息。使用模仿Bootstrap's Popover control 行为的控件向用户显示这些详细信息。我使用跨越整个窗口的不可见 Canvas 覆盖来完成此操作,并且“弹出框”本身使用计算的 Canvas.Left 和 Canvas.Top 属性相对放置在此 Canvas 上。
下面是我的应用程序当前 XAML 的(非常简化的)视图:
<Window>
<Grid x:Name="container">
<.. a lot of various nested elements ..>
<StackPanel x:Name="sidepanel">
.. content of the sidepanel control ..
</StackPanel>
</.. a lot of various nested elements ..>
<Canvas x:Name="overlay">
.. content of the Popover control ..
</Canvas>
</Grid>
</Window>
这很好用,除了我想将此功能重构为单个控件。但是,我不确定如何继续 - 如果自定义 UserControl 在其 XAML 定义中包含 Canvas 覆盖,我将无法以与当前定位相同的方式定位控件的侧面板部分在应用程序内。但是,Canvas 叠加层不能嵌套在侧面板内,因为它需要跨越整个窗口才能正常运行。
有没有办法定义一个可以位于逻辑树不同部分的UserControl?或者有没有更好的方法来实现这个效果?
【问题讨论】:
-
只是出于兴趣,您是否有理由不能使用现有的popup 控件?
-
@Benjamin 我对 WPF 还很陌生,几周前我实现这个弹出框效果时还不知道
Popup控件。如果我最终重写它,我肯定会使用Popup...这样会更容易使用,而且我可以完全避免这个问题。
标签: c# wpf user-controls