2017-07-25 12 views
0

私はMVVMに境界線を持っています。私が達成しようとしているのは、マウスの左ボタンを境界線の外に検出し、それを隠すことです。私はメインウィンドウのMouseLeftButtonDownイベント内でそれを行うことができますが、それが最善の解決策であるかどうかはわかりません。どうすればこのことができますか?たとえば、この境界線がスタックパネルに配置され、スタックパネルがマウスの左ボタンのダブルクリックで隠されているなど、他のイベントを妨げるためにこのクリックを避けたいとします。ボーダー外でマウスの左ボタンをクリック(クリック)します。WPF MVVM

<Border Grid.Row="2" 
    x:Name="customPopup" 
    CornerRadius="10,10,0,0" 
    Height="25" Margin="0" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center" 
    Width="Auto" 
    BorderBrush="DarkBlue" 
    BorderThickness="1" 
    Background="AntiqueWhite"> 
    <StackPanel Orientation="Horizontal" 
       HorizontalAlignment="Center"> 
     <Image Source="/Common.Images;component/Images/Info.png" 
       Height="20" 
       Width="20" Stretch="Fill"/> 
     <TextBlock Margin="5" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Left" 
        Background="Transparent" 
        FontSize="12"> 
        <Run Text="Click outside to close it"/> 
     </TextBlock> 
    </StackPanel> 
</Border> 

答えて

0

MouseDownを使用すると、希望の結果が得られるはずです。カーソルが境界線の外側にあるかどうかを確認するには、いくつかの計算を行う必要があります。何かのように:

次に、PreviewMouseDoubleClickを使用してください。プレビューイベントはバブリングではなくトンネリングであるため、同じ要素にシングルクリックイベントがあってもダブルクリックが呼び出されるはずです。

private void Window_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    // double click code... 
    e.Handled = true; 
} 
+0

投稿した署名の方法はありませんでした。次のシグネチャがあります:private void Window_PreviewMouseDown(object sender、MouseButtonEventArgs e)ダブルクリックイベント(スタックパネルを隠す)が動作していないので、動作しません。 – user1624552

+0

私のトンネリング/バブリングのイベントが混ざりました。私の編集を確認してください。 –

+0

Window_MouseDown内で&&を使用しています。また、外部のカスタムポップアップをクリックしたときに必ずしも非表示になっているとは限りません。たとえば、ボタンをクリックするかテキストボックスをクリックすると、ポップアップは非表示になりません。私は、ポップアップの外のUIの任意のコントロールをクリックすると隠されたいと思います。これをどうすれば解決できますか? – user1624552

関連する問題