2013-05-02 268 views
2

我正在尝试使用Caliburn.Micro(用于我的第一个WPF MVVM项目),并且我正在努力使WindowManager.ShowPopup方法将焦点设置为弹出屏幕。这可能吗?来自Caliburn的示例HelloWindowManager也没有这样做,并且文档非常轻。Caliburn.Micro ShowPopup - 设置焦点

+0

你想让你的弹出框为模态吗? – 2013-05-02 16:40:43

+0

想知道是否在某个弹出窗口控件上调用'Focus'会起作用(我不认为有一种方法专注于实际的弹出窗口本身)。如果是这样,你可以创建一些功能来查看视图上的名称元素(使用'IViewAware.GetView()'),并在虚拟机已经安装后进行聚焦。 – Charleh 2013-05-02 16:49:25

+0

我最终得到了ShowWindow(不是ShowPopup)的组合并且使用EventAggregator将事件发布到被调用的窗口的ViewModel ...在那里我设置了一个属性并在视图上使用了一个DataTrigger来设置焦点的FocusManager。它可能是黑客,但它似乎工作。 – fussmonkey 2013-05-02 19:56:46

回答

1

最终,我无法让ShowPopup方法正常工作。

我做的改为使用ShowWindow,然后在显示窗口时使用EventAggregator发布事件。在的ViewModel中调用 View,我订阅了该事件,并将ViewModel上的属性设置为true(在本例中为KeywordEntryActive)。

然后我在网格上使用一个样式,该样式使用绑定到该属性的DataTrigger来调用View中的FocusManager.FocusedElement方法。

<Grid.Style> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding KeywordEntryActive}" Value="True"> 
       <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=Command}" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Grid.Style> 

它似乎比我预期的那么简单,但我能做到什么,我一直在寻找在不牺牲视图模型和视图的分离,所以我很满意它在这一点上。 Caliburn.Micro有一些学习曲线,但到目前为止,我已经能够克服我遇到的困难,并且我正在继续走下去。