【发布时间】:2013-07-29 18:53:39
【问题描述】:
我正在尝试找到正确显示非基于窗口的模式对话框的方法(即它们覆盖窗口的现有部分并以模式方式显示在该内容的顶部 - 覆盖的部分不可访问)。该应用程序构建在 caliburn.micro 框架 1.5.2 之上的 .net 4.5 中,并使用 MefBootstrapper(基于 http://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper)。
简单的解决方案(xaml 堆栈中的重叠控件)并未涵盖所有问题,例如键盘焦点和导航。
我找到了 ModalContentPresenter 类,它派生自 FrameworkElement,并在 http://programmingwithpassion.wordpress.com/2012/07/01/displaying-modal-content-in-wpf/ 上展示,它似乎可以处理模式对话框的大部分可能问题。
很遗憾,窗口没有显示任何内容。根据我的研究,代码约定似乎不适用于定义为 ModalContentPresenter 的子项的控件。不幸的是,我在 caliburn.micro 源代码和/或文档中找不到合适的位置。
示例(没有 ModelContentPresenter,工作):
<Window>
<TextBlock x:Name="SomeName"/>
</Window>
示例(使用 ModelContentPresenter,不起作用):
<Window>
<c:ModelContentPresenter isModal="False">
<TextBlock x:Name="SomeName"/>
</c:ModelContentPresenter>
</Window>
我需要做什么才能让代码约定与 ModelContentPresenter 一起使用,或者您有更好的解决方案吗?
【问题讨论】:
-
您是否检查过名为 HelloScreens 的示例应用程序,它是文档中 Screens, Conductors and Composition 的一部分。作者以很好的方式实现了这一点,据我所知,它适用于导航和焦点。
-
屏幕/导体等适用于每次仅访问一个屏幕(来自该特定堆栈)的情况。这与我的情况形成鲜明对比,当我希望在显示模式对话框时原始屏幕仍然可见(只要显示模式对话框,原始屏幕就会稍微变暗)。因此,我认为示例应用程序没有用。是的,它们对于“显示当前屏幕”和“显示最近的模态对话框”部分很有用,但对于“在同一个地方同时显示当前屏幕和模态对话框”则不适用。
标签: c# wpf modal-dialog caliburn.micro c#-5.0