如何禁用打开 WPF 弹出窗口
How to disable opening WPF 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}"
我在我的案例中找到了一个特殊的答案。我应该禁用 ToggleButton
:
而不是禁用 Popup
<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
的一般答案。欢迎任何有答案的人。
您可以在 window.
中的所有内容之上放置一个面板(网格)
这需要设置背景,但如果您仍想看到 window 内容,可以设置低不透明度。
使其仅在显示弹出窗口时可见,否则折叠。
确保在显示时将焦点设置到弹出窗口。
.
谨记
弹出窗口是分开的 windows。
它们旨在短暂显示,如果长时间显示它们会有许多潜在的缺点。 EG 其他应用程序可以出现在它们下面并且它们不会随着它们的 "parent" window/control.
移动
您可能会发现模态 window 更简单,更适合您,具体取决于您的具体要求。
只需实例化一个 window 并使用
PopupWindow newWindow = new PopupWindow();
newWindow.ShowDialog();
其中 PopupWindow 只是任何旧的 window 样式,看起来像您想要的弹出窗口。
这将保证用户无法以某种方式与您应用中的任何其他 window 互动。
.
另一种可能性是在网格中显示您的 "popup" 内容,该网格显示在主 window.
中所有内容的顶部
这就是编辑数据的方式:
https://gallery.technet.microsoft.com/scriptcenter/WPF-Entity-Framework-MVVM-78cdc204
该方法的优点或缺点在于它在 window 中。
--- Brian Kress ---
我有一个 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}"
我在我的案例中找到了一个特殊的答案。我应该禁用 ToggleButton
:
Popup
<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
的一般答案。欢迎任何有答案的人。
您可以在 window.
中的所有内容之上放置一个面板(网格)这需要设置背景,但如果您仍想看到 window 内容,可以设置低不透明度。
使其仅在显示弹出窗口时可见,否则折叠。
确保在显示时将焦点设置到弹出窗口。
.
谨记
弹出窗口是分开的 windows。
它们旨在短暂显示,如果长时间显示它们会有许多潜在的缺点。 EG 其他应用程序可以出现在它们下面并且它们不会随着它们的 "parent" window/control.
移动您可能会发现模态 window 更简单,更适合您,具体取决于您的具体要求。
只需实例化一个 window 并使用
PopupWindow newWindow = new PopupWindow();
newWindow.ShowDialog();
其中 PopupWindow 只是任何旧的 window 样式,看起来像您想要的弹出窗口。
这将保证用户无法以某种方式与您应用中的任何其他 window 互动。
.
另一种可能性是在网格中显示您的 "popup" 内容,该网格显示在主 window.
中所有内容的顶部这就是编辑数据的方式:
https://gallery.technet.microsoft.com/scriptcenter/WPF-Entity-Framework-MVVM-78cdc204
该方法的优点或缺点在于它在 window 中。 --- Brian Kress ---