Как отключить страницу при отображении всплывающего окна

Я пытаюсь отобразить всплывающее окно на странице. Желаемое поведение состоит в том, чтобы страница находилась в фоновом режиме, где на ней будет отображаться всплывающее окно. Когда отображается всплывающее окно, я все еще могу взаимодействовать с фоновой страницей. Но мне нужно отключить фоновую страницу.

<Grid>
    <Grid>
        <Pivot IsEnabled="{Binding IsPopUpOpen , Converter={StaticResource BooleanInversionConverter}}">
        </Pivot>
    </Grid>

    <Popup Name="Popup" IsOpen="{Binding IsPopUpOpen}" VerticalAlignment="Center">
        <TextBox Foreground="Black" FontSize="28" FontWeight="Normal" BorderBrush="Black" BorderThickness="2" HorizontalAlignment="Left" Width="440"/>
    </Popup>

</Grid>

Когда я запускаю этот код, я получаю исключение:

System.InvalidOperationException is unhandled Сообщение: Необработанное исключение типа «System.InvalidOperationException» произошло в System.Windows.ni.dll Дополнительная информация: Не удается разрешить TargetName Img.

Дайте мне знать, как отключить сводку, используя подход MVVM.


person Arjun K R    schedule 29.09.2014    source источник


Ответы (2)


Просто поместите всплывающее окно выше всех остальных элементов управления. Пример:

<grid>
  <yourxaml>
</grid>
<popup horizontalAlignement="Stretch" verticalignementAlignement="Stretch"></popup>

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

person MatDev8    schedule 29.09.2014
comment
тогда фон всплывающего окна создаст наложение. Я хочу, чтобы страница была видна. Всплывающее окно обычно не скрывает весь экран. - person Arjun K R; 29.09.2014
comment
О, вы хотите показывать всплывающее окно и не показывать приложение в фоновом режиме? действительно странно, но почему бы не создать общую страницу для отображения вашего сообщения? Страница с - person MatDev8; 29.09.2014

Вы должны иметь возможность подписаться на события Opened и Closed, получить окно и отключить само окно. У меня есть дочерний класс, поэтому я решил переопределить его, так как мне нужно перетаскиваемое всплывающее окно. Ниже работает для меня.

        protected override void OnOpened(EventArgs e)
        {
            base.OnOpened(e);

            var parentWindow = Window.GetWindow(this);

            parentWindow.IsEnabled = false;
        }

        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);

            var parentWindow = Window.GetWindow(this);

            parentWindow.IsEnabled = true;
        }
person Gregory A. Owen    schedule 13.02.2019