【问题标题】:How to disable opening WPF popup如何禁用打开 WPF 弹出窗口
【发布时间】:2018-07-05 08:15:09
【问题描述】:

我有一个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}"

【问题讨论】:

    标签: c# wpf xaml popup


    【解决方案1】:

    您可以在窗口中的所有内容之上放置一个面板 (Grid)。

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

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

    确保在弹出窗口显示时将焦点设置为。

    .

    记住。

    弹出窗口是独立的窗口。

    它们的目的是简短地显示,如果您长时间显示它们,可能会有许多潜在的缺点。 EG 其他应用程序可以出现在它们下方,并且它们不会随其“父”窗口/控件一起移动。

    您可能会发现模态窗口更简单,更适合,具体取决于您的具体要求。

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

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

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

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

    .

    另一种可能性是在网格中显示您的“弹出”内容,该网格显示在主窗口内所有内容的顶部。

    这就是编辑数据的工作原理:

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

    这种方法的优点或缺点在于它在一个窗口中。 --- Brian Kress ---

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        相关资源
        最近更新 更多