2013-05-02 36 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有一些學習曲線,但到目前爲止,我已經能夠克服我遇到的困難,並且我正在繼續走下去。