none
WPF中Window.ShowDialog() RRS feed

  • 问题

  • 似乎与winform中的showdialog行为不太一致,window.showdialog之后父窗体虽然不可以接受鼠标输入,但仍然可以接受键盘输入
    而winform中父窗体则不接受任何输入
           之前的问题没人解答,希望高手赐教。


    格子棋
    2009年8月13日 5:43

答案

  • 一般我都采用在一个窗口中打开一个Grid的形式模拟一个弹出式窗口。如果必须使用ShowDialog,通常我采用两种比较笨的方法解决这一问题的。

    方法A
    1. 首先建立一个程序共享Boolean变量(VB:Public Shared;C#:public static),不如暂时叫做A吧。并将A赋值为True。为了讨论方便假设有两个窗口,主窗口Win1和弹出窗口Win2。
    2. 在ShowDialog弹出窗口Win2之前加上两句话。第一句把Me(也就是主窗口Win1).IsEnabled=False;第二句A=False。
        (另一种方法是加一个<Grid Name="B" Background="Transparent" Panel.ZIndex="1000" Visibility="Hidden"/>,然后把Me.IsEnabled=False这句改成:B.Visibility=Windows.Visibility.Visible。)
    3. 在Win1的Activated事件中加一个If判断。如果A=True,则将MeMe.IsEnabled=True(或B.Visibility = Windows.Visibility.Hidden)。
    4. 在Win2的Closing事件中加一句,A=True。

    方法B
    1. 建立一个窗口(VB:Public W As New Window;C#:public Window W = new Window())。
    2. ShowDialog时这样做:
        VB:
            Dim Win As New Win2
            W = Win
            Win.ShowDialog()
        C#:
            Win2 Win = new Win2();
            W = Win;
            Win.ShowDialog();
    3. 在Win1的Activated事件中加一句:W.Activate()。

    2009年8月15日 9:00

全部回复

  • 一般我都采用在一个窗口中打开一个Grid的形式模拟一个弹出式窗口。如果必须使用ShowDialog,通常我采用两种比较笨的方法解决这一问题的。

    方法A
    1. 首先建立一个程序共享Boolean变量(VB:Public Shared;C#:public static),不如暂时叫做A吧。并将A赋值为True。为了讨论方便假设有两个窗口,主窗口Win1和弹出窗口Win2。
    2. 在ShowDialog弹出窗口Win2之前加上两句话。第一句把Me(也就是主窗口Win1).IsEnabled=False;第二句A=False。
        (另一种方法是加一个<Grid Name="B" Background="Transparent" Panel.ZIndex="1000" Visibility="Hidden"/>,然后把Me.IsEnabled=False这句改成:B.Visibility=Windows.Visibility.Visible。)
    3. 在Win1的Activated事件中加一个If判断。如果A=True,则将MeMe.IsEnabled=True(或B.Visibility = Windows.Visibility.Hidden)。
    4. 在Win2的Closing事件中加一句,A=True。

    方法B
    1. 建立一个窗口(VB:Public W As New Window;C#:public Window W = new Window())。
    2. ShowDialog时这样做:
        VB:
            Dim Win As New Win2
            W = Win
            Win.ShowDialog()
        C#:
            Win2 Win = new Win2();
            W = Win;
            Win.ShowDialog();
    3. 在Win1的Activated事件中加一句:W.Activate()。

    2009年8月15日 9:00
  • 谢谢。。。呵呵     之前同一个问题一个多星期都没人解决。。。
        小弟刚接触wpf不久。。。所以。。。真的非常感谢。。。。
    格子棋
    2009年8月17日 0:20