Как отключить открытие всплывающего окна WPF - PullRequest
0 голосов
/ 05 июля 2018

У меня есть Popup и ToggleButton. Я установил привязку так:

<ToggleButton x:Name="myToggle" Content="{Binding MyData.Title}" />
<Popup IsOpen="{Binding IsChecked, ElementName=myToggle}" >
   <TextBlock Text="{Binding MyData.Details}" />
</Popup>

Как вы видите, я ограничил содержимое кнопки-переключателя MyData.Title, а содержимое всплывающего окна - MyData.Details.

Теперь у меня были критерии MyData.ShowDetails. Если это true, всплывающее окно может открыться, а если оно false, то всплывающее окно не должно открываться.

Как мне установить привязку для достижения этой цели?

Я протестировал эти привязки на Popup, но никто не работает:

Visibility="{Binding MyData.ShowDetails, Converter={StaticResource BooleanToVisibilityConverter}}"

IsEnable="{Binding MyData.ShowDetails}"

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете поместить панель (Сетка) поверх всего содержимого в вашем окне.

Для этого необходимо установить фон, но он может быть непрозрачным, если вы все еще хотите видеть содержимое окна.

Сделать это видимым только тогда, когда отображается всплывающее окно, а в противном случае свернуть.

Убедитесь, что вы установили фокус на всплывающее окно, когда оно отображается.

.

Имейте в виду.

Всплывающие окна - это отдельные окна.

Они предназначены для краткого отображения и имеют ряд потенциальных недостатков, если вы показываете их в течение более длительных периодов. Например, другие приложения могут появляться под ними, и они не перемещаются со своим «родительским» окном / элементом управления.

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

Просто создайте окно и используйте

PopupWindow newWindow = new PopupWindow();
newWindow.ShowDialog();

Где PopupWindow - это любое старое окно, стилизованное под всплывающее окно.

Это гарантирует, что пользователь не сможет каким-либо образом взаимодействовать с любым другим окном в вашем приложении.

.

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

Вот так работает редактирование данных:

https://gallery.technet.microsoft.com/scriptcenter/WPF-Entity-Framework-MVVM-78cdc204

Плюс или минус этого подхода в том, что он в одном окне. --- Брайан Кресс ---

0 голосов
/ 05 июля 2018

Я нашел специальный ответ в моем случае. Вместо отключения Popup я должен отключить ToggleButton:

<ToggleButton x:Name="myToggle" Content="{Binding MyData.Title}" 
              IsEnabled="{Binding MyData.ShowDetails}"/>
<Popup IsOpen="{Binding IsChecked, ElementName=myToggle}" >
   <TextBlock Text="{Binding MyData.Details}" />
</Popup>

Работает отлично!

Примечание: Это не общий ответ для Popup. Добро пожаловать всем, у кого есть ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...