2017-08-29 4 views
0

こんにちは私は開くにはトリガーボタンが必要とポップアップを閉じて、ポップアップの外でマウスのクリックが発生するたびにポップアップを閉じる必要があります。トリガーボタンでポップアップを開く

は、ここに私のXAMLです:、問題は、ポップアップが開いているとき、ある、と私は約ボタンをクリックし

private bool isAboutPopupOpen; 

public bool IsAboutPopupOpen 
{ 
    get 
    { 
     return this.isAboutPopupOpen; 
    } 

    set 
    { 
     if (value != this.isAboutPopupOpen) 
     { 
      this.isAboutPopupOpen = value; 
      this.NotifyOfPropertyChange(() => IsAboutPopupOpen); 
     } 
    } 
} 

public void About() 
{ 
    IsAboutPopupOpen = true; 
} 

<Button x:Name="About" 
        Height="50" 
        Margin="0,-30,5,0" 
        HorizontalAlignment="Right" 
        Style="{StaticResource AboutButtonStyle}" /> 
<Popup HorizontalOffset="-300" 
        IsOpen="{Binding IsAboutPopupOpen, Mode=TwoWay}" 
        Placement="RelativePoint" 
        PlacementTarget="{Binding ElementName=About}" 
        StaysOpen="False" 
        VerticalOffset="-125"> 
    <Border Padding="10" 
         Background="White" 
         BorderBrush="{StaticResource SeparatorColorBrush}" 
         BorderThickness="1"> 
     <TextBlock>Some Text</TextBlock> 
    </Border> 
</Popup> 

私AboutViewModelでは、私は、プロパティ、IsAboutPopupOpenを実装していますポップアップが閉じて再び開きます。それは終了するはずです。それ以外は、行動が正しい。

私はこれに対する単純な解決法を探していて、見つけられないようです。これはよくある質問です。ああ、私はCaliburn.Microを使っていますが、それは問題ではありません。私は思っていません。ありがとう

+1

これはおそらく役に立ちます:https://stackoverflow.com/questions/2333905/wpf-popup-hiding-problem – Xiaoy312

+0

問題は再現できません:https://stackoverflow.com/help/mcve – mm8

答えて

0

@ Xiaoy312は正しい方向に私を指摘しました。最初に私はトグルボタンを使用することにしました:

<ToggleButton 
     x:Name="ShowAboutPopup" 
     Grid.Row="1" 
     Height="50" 
     Margin="0,-30,5,0" 
     HorizontalAlignment="Right" 
     Grid.ZIndex="1000" 
     Style="{StaticResource AboutButtonStyle}" /> 

は、それから私はのIsOpen属性を経由して、ポップアップに私のトグルボタンを接続することを決めた、とfalseにStaysOpenを設定:

<Popup 
     Grid.Row="1" 
     Closed="AboutPopup_OnClosed" 
     HorizontalOffset="-300" 
     IsOpen="{Binding ElementName=ShowAboutPopup, Path=IsChecked, Mode=OneWay}" 
     Placement="RelativePoint" 
     PlacementTarget="{Binding ElementName=ShowAboutPopup}" 
     StaysOpen="False" 
     VerticalOffset="-125"> 
... 
    </Popup> 

そして最後に、私は中AboutPopup_OnClosedを実装しましたコードビハインド:

private void AboutPopup_OnClosed(object sender, EventArgs e) 
    { 
     if (!object.Equals(this.ShowAboutPopup, Mouse.DirectlyOver)) 
     { 
      this.ShowAboutPopup.IsChecked = false; 
     } 
    } 

これは、これで苦労している可能性がある他の人に役立ちます。要点は、通常、ポップアップを開閉するためにトグルボタンを使用すべきであるということです。

関連する問題