2017-01-15 23 views
1

ウィンドウページがあり、ウィンドウページからボタンをクリックした後に> UserControlページが表示されます。内部UserControlの後に<Popup Name="MyPopup">ポップアップがあります。ポップアップは常にトップの問題にとどまります。どうすればこの問題を解決できますか?Wpf - ボタンをクリックするとUsercontrol内でポップアップの問題が発生する

私は、それから、これはポップアップでユーザーコントロールのページで、

<UserControl x:Class="WpfApplication1.UC_UserMgmt" 
 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 
      mc:Ignorable="d" 
 
      d:DesignHeight="300" d:DesignWidth="400" Background="Blue"> 
 
    
 
     <Grid> 
 
     <Grid Name="g1"> 
 
      <Button Content="usercontrol_ClickMe" Height="50" Width="150" Margin="150,0,0,250" Click="btnShow_Click"></Button> 
 
      
 
     </Grid> 
 
       <Popup Name="MyPopup" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
 
           HorizontalOffset="-150" Placement="Mouse" StaysOpen="{Binding ElementName=g1,Path=IsMouseOver}" 
 
       VerticalOffset="20" 
 
       AllowsTransparency="True"> 
 
     <StackPanel> 
 
      <Border BorderBrush="Black" Background="Brown" BorderThickness="1" Width="300" Height="100" > 
 
       <Grid> 
 
        <TextBox x:Name="txtUName" HorizontalAlignment="Center" Height="28" Width="223" TextWrapping="Wrap" VerticalAlignment="Top" Margin="10,26,64.6,0" /> 
 
        <Button Content="Open" Height="30" Width="50" Margin="238,24,9.6,43.6" Click="btnOpen_Click"/> 
 
       </Grid> 
 
      </Border> 
 
     </StackPanel> 
 
     </Popup> 
 
    </Grid> 
 
</UserControl>

private void btnUserManage_Click(object sender, RoutedEventArgs e) 
    { 
     UC_UserMgmt mw = new UC_UserMgmt(); 
     cont2.Content = mw; 
     cont2.Visibility = Visibility.Visible; 
    } 

をウィンドウのページの後ろ

<Window x:Class="WpfApplication1.MainWindow" 
 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
 
     Title="MainWindow" Height="350" Width="525" Background="Green"> 
 
    <Grid > 
 
     <Button Height="50" Width="100" Content="window_ClickMe" Click="btnUserManage_Click"></Button> 
 
      <ContentControl Name="cont2" Visibility="Hidden"> 
 
      
 
     </ContentControl> 
 
    </Grid> 
 
    
 
</Window>

とコードを試してみました

、これはユーザーコントロールのコードビハインドページで、

private void btnOpen_Click(object sender, EventArgs e) 
    { 
     MyPopup.IsOpen = true; 
     System.Windows.Forms.OpenFileDialog fDialog = new System.Windows.Forms.OpenFileDialog(); 
     fDialog.Title = "Select file to be zip"; 
     if (fDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      txtUName.Text = fDialog.FileName.ToString(); 
     } 
    } 

    private void btnShow_Click(object sender, EventArgs e) 
    { 
     MyPopup.IsOpen = true; 
    } 

問題は、ユーザーが[開く]ボタンをクリックしたときに、ある、openFileDialogが開いていると、それが開かれたときに、ポップアップが消えているようです。どうすればこの問題を解決できますか?

答えて

1

ポップアップの使用はあなたの状況に適した選択ではないと思います。特に、Popup.StaysOpen Property

StaysOpenプロパティがtrueに設定されている場合、それが明示的にfalseにのIsOpenプロパティを設定することによって閉じられるまで、ポップアップが開いたままを言う部分を見てみましょう。 StaysOpenがfalseの場合、ポップアップコントロールはマウスとキーボードのすべてのイベントをインターセプトし、これらのイベントの1つがポップアップコントロールの外部で発生するかどうかを判断します。

ダイアログボックスでは、

だけに、それを操作する際に、マウス/キーボードイベントを作成しようとしているので、私は、ダイアログボックスを示すときに開いているポップアップを維持するクリーンな方法を考えることはできません

あなたの質問に答えて、私は2つの選択肢を考えることができます

MyPopup.IsOpen = true;btnOpen_Clickにコードブロックの最後に移動するだけです。私はポップアップを表示するときにtrueに設定しますが、背後にあるコード内でブールプロパティまたは依存関係プロパティを作成することができます)これは、ダイアログボックスが

2閉じられた後にポップアップが再度開くことになりますと仮定してのおポップアップのStaysOpenをバインドそれはおそらくで偽に設定されるかもしれません.LostFocusg1またはそのようなものです。あるいはにStaysOpenを設定し、のLostFocus

編集G1にあなたのポップアップを閉じるには、のIsOpenを使用する - 第二の溶液ハウツーがそれを使用しないでください、汚いコード、悪い習慣、およびポップアップがポップアップでダイアログボックス

の上に残っているがUserCo内のすべてのコントロールではStaysOpen="True"
を設定しましたユーザーコントロール自体とテキストボックスがユーザーコントロールのコードビハインドにprivate bool dont;を追加し、btnOpen_Clickの初めにに設定し、ユーザーコントロールとテキストボックスにそのエンド
虚偽に設定Focusable="False"
を設定除いntrol LostFocus="UserControl_LostFocus"
を追加し、コードビハインド

private void UserControl_LostFocus(object sender, RoutedEventArgs e) 
{ 
    if(!dont && !txtUName.IsFocused && !IsFocused) 
     MyPopup.IsOpen = false; 
} 
+0

卿、恐れ入りますが、ユーザーコントロールでこの機能を追加!私はあなたの2番目のアドバイスから明確なアイデアを得ることができません。いくつかの例で説明していただけますか?私は別の問題に直面しています。すなわち、私はポップアップの位置を集中することができません。それは人口配置の後にその都度変更されています。 – AbhiJA

+0

@AbhiJAポップアップの位置が毎回変わる理由は、 'Placement =" Mouse ""を 'Placement =" Bottom "に変更するか、そのような静的でデザインに合ったオプションを変更したからです。位置が親以外のものと相対的であるようにするには、 'PlacementTarget'を使います。コードサンプルについては、私は数時間を与える必要があります –

+0

確かに!ありがとう。私はあなたの答えを待つつもりも私の側にもお試しください。もう一度ありがとうございます。 – AbhiJA

関連する問題