Я пытаюсь использовать Caliburn.Micro (для моего первого проекта WPF MVVM), и я изо всех сил пытаюсь заставить метод WindowManager.ShowPopup установить фокус на всплывающем экране. Это возможно? Образец HelloWindowManager от Caliburn тоже этого не делает, и документация довольно легкая.
Caliburn.Micro ShowPopup — установка фокуса
Ответы (1)
В конце концов, мне не удалось заставить метод ShowPopup
работать так, как я хотел.
Вместо этого я использовал ShowWindow
, а затем использовал EventAggregator для публикации события, когда я показывал окно. В ViewModel для вызванного представления я подписался на это событие и установил для свойства 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 и View, поэтому на данный момент я доволен этим. Caliburn.Micro пришлось немного поучиться, но до сих пор мне удавалось преодолевать препятствия, с которыми я сталкивался, и я продолжаю идти по этому пути.
Focus
для одного из элементов управления всплывающими окнами (я не думаю, что есть способ сосредоточиться на самом всплывающем окне). Если это так, вы можете просто создать некоторую функциональность, чтобы найти элемент по имени в представлении (используяIViewAware.GetView()
) и сфокусировать его после создания виртуальной машины. - person Charleh   schedule 02.05.2013popup.IsOpen = true
я пробовал несколько подходов, чтобы сфокусировать первый элемент управления во всплывающем окне, не повезло - person JobaDiniz   schedule 21.06.2017