Диалог должен выходить вперед при нажатии кнопки - PullRequest
1 голос
/ 26 февраля 2020

Я использую Prism 5. Для отображения диалога я использую InteractionRequest. Свойство IsModel имеет значение False, поэтому, когда я щелкаю по главному окну (откуда поднимаются диалоги), диалоги переходят в фоновый режим. Теперь я пытаюсь реализовать следующее: когда я снова нажму кнопку, снова появится диалоговое окно.

Вот мой пользовательский класс PopupWindowActionclass:

public class CustomDialogWindow : PopupWindowAction
{
    private Window window;

    protected override Window GetWindow(INotification notification) {
        window = base.GetWindow(notification);
        return window;
    }


    public static readonly DependencyProperty SetFocusProperty =
         DependencyProperty.Register("SetFocus", typeof(bool), 
                       typeof(CustomDialogWindow), null);

    public bool SetFocus {
        get { return (bool)GetValue(SetFocusProperty); }
        set {
            if (value) {
                if (window != null) {
                    window.Activate();
                    window.Focus();
                }
            }
            SetValue(SetFocusProperty, value);
        }
    }
}

Вот моя конфигурация на стороне XMAL:

  <prism:InteractionRequestTrigger SourceObject="{Binding ContainerMoveSummaryRequest, Mode=OneWay}">
        <popout:CustomDialogWindow  x:Name="ContentSummaryGridAction"
                                                     IsModal="False" SetFocus="{Binding SetFocusOnContainerMoveSummary,Mode=TwoWay}">
            <popout:CustomDialogWindow.WindowContent>
                <dialogs:ContainerMoveSummaryDialog />
            </popout:CustomDialogWindow.WindowContent>
        </popout:CustomDialogWindow>
    </prism:InteractionRequestTrigger>

Проблема в том, что привязка выполняется в двух направлениях: при изменении SetFocusOnContainerMoveSummary, SetFocus не получает изменений.

Пожалуйста, дайте мне знать любое решение для этого.

1 Ответ

2 голосов
/ 02 марта 2020

Проблема даже в том, что привязка двунаправленная, при изменении SetFocusOnContainerMoveSummary, SetFocus не вызывается

Это ожидаемое поведение, когда среда обходит свойство помощника и использует свойство зависимости напрямую.

Вам необходимо установить обратный вызов для свойства зависимости и go оттуда:

public static readonly DependencyProperty SetFocusProperty = 
    DependencyProperty.Register(nameof(SetFocus), 
        typeof(bool),
        typeof(CustomDialogWindow), 
        new PropertyMetaData( default(bool), OnSetFocusChanged);

private static void OnSetFocusChanged( DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs )
{
    // get the window from dependencyObject (= the CustomDialogWindow instance) and call SetFocus
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...