如何禁用打开WPF弹出窗口

时间:2018-07-05 08:15:10

标签: c# wpf xaml popup

我有一个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 :(得分:1)

在我的案件中,我找到了一个特殊的答案。我应该禁用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的一般答案。欢迎任何有答案的人。

答案 1 :(得分:1)

您可以在窗口中所有内容的顶部放置一个面板(网格)。

这需要设置背景,但是如果您仍然想查看窗口内容,它的透明度可能会很低。

仅在显示弹出窗口时使其可见,否则折叠。

确保将焦点设置在显示的弹出窗口上。

记住。

弹出窗口是单独的窗口。

旨在简要展示它们,如果长时间显示它们,则存在许多潜在的缺点。 EG其他应用程序可能会显示在其下方,并且它们不会随其“父”窗口/控件一起移动。

根据您的确切要求,您可能会发现模态窗口更容易且更适合。

只需实例化一个窗口并使用

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

PopupWindow只是样式看起来像您想要弹出窗口的任何旧窗口。

这将确保用户无法以某种方式与您应用中的任何其他窗口进行交互。

另一种可能性是在主窗口内所有内容之上的网格中显示“弹出”内容。

这就是编辑数据的方式:

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

该方法的优缺点是它在一个窗口中。 --- Brian Kress ---