2013-05-02 5 views
2

Я пытаюсь использовать Caliburn.Micro (для моего первого проекта MVVM WPF), и я боюсь получить метод WindowManager.ShowPopup, чтобы установить фокус на всплывающее окно. Это возможно? Образец HelloWindowManager от Caliburn тоже не делает этого, и документация довольно светлая.Caliburn.Micro ShowPopup - установить фокус

+0

Вы хотите, чтобы ваше всплывающее окно было модальным? –

+0

Удивительно, если бы работа над вызовом 'Фокус' на одном из элементов управления всплывающих окон (я не думаю, что есть способ сосредоточиться на самом всплывающем окне). Если это так, вы можете просто создать некоторую функциональность, чтобы найти элемент по имени в представлении (используя «IViewAware.GetView()») и сфокусировать его после установки виртуальной машины. – Charleh

+0

В конечном итоге я получил эту работу с помощью ShowWindow (а не ShowPopup), а также с помощью EventAggregator, чтобы опубликовать событие в ViewModel вызываемого окна ... там я установил свойство и использовал DataTrigger в представлении, чтобы установить фокус через FocusManager. Это может быть взлом, но, похоже, он работает. – fussmonkey

ответ

1

В конечном счете, мне не удалось получить способ ShowPopup работать так, как я хотел.

Вместо этого я использовал ShowWindow, а затем использовал EventAggregator для публикации события, когда я показывал окно. В ViewModel для под названием View я подписался на это событие и установил для свойства ViewModel значение true (с именем KeywordEntryActive в этом примере).

Затем я использую стиль на гриде, который использует DataTrigger, связанный с этим свойством, чтобы вызвать метод 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> 

казалось менее простым, чем я надеялся, но я был в состоянии сделать то, что я искал, не жертвуя при этом разделение ViewModel и вида, так что я доволен в этой точке. Там была небольшая кривая обучения с Caliburn.Micro, но до сих пор мне удалось преодолеть препятствия, с которыми я столкнулся, и я продолжаю идти по этому пути.

Смежные вопросы