2016-10-31 10 views
0

私はCommandBarを持つグリッドを持っています。ポインタがグリッドまたは任意の子コンポーネントをホバリングしている場合にのみ、CommandBarを表示したいと思います。CommandBarを開いて、ポインタイベントを飲み込まないようにします。

PointerEnteredイベントでIsOpenをtrueに設定してCommandBarを表示します。残念ながら、開いているCommandBarはPointerExitedイベントを飲み込んでおり、CommandBarを閉じることができませんでした。

私が見つけたもの:

  • 私がtrueにでIsEnabledを設定した場合、コマンドバーが細かいやっている...私のボタン以外は無効になります。)
  • 私はClosedDisplayModeの代わりのIsOpenを設定した場合、それはあまりにも動作します - しかし、隠されたと開いた間の素敵な移行はありません

私のポインタイベントを飲み込むとはどうすればそれを防ぐことができますか?それとも、私の問題に対して別の解決策がありますか?ここで

simplificated例:

<!-- Some content --> 

<!-- Grid with command bar --> 
<Grid Height="300" Width="700" PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited" BorderBrush="Black" BorderThickness="1"> 
    <!-- Template just set Visibility of "MoreButton" to Collapsed (hiding it because it is not needed if you have hover ability) --> 
    <CommandBar VerticalAlignment="Bottom" Canvas.ZIndex="1" x:Name="uxCommandBar" Template="{StaticResource CommandBarControlTemplate1}"> 
    <!-- Buttons -->     
    </CommandBar> 

    <!-- Other content stuff - here a Canvas for providing a hoverable area --> 
    <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Red"></Canvas> 
</Grid> 

答えて

1

頭に浮かぶ二つのものがあります。デフォルトでは

  1. は、IsStickyは、それがfalseにのIsOpenを設定することを意味し、コマンドバーのために偽であります(コマンドバー要素の外側のどこかをクリックすると)自動的に消灯します。これは、コマンドバーと透明グリッドが開いているときにポップアップとして表示することでこれを行います。透過グリッドは、ポインターイベントを食べるものです。この動作を防ぐには、IsStickyをtrueに設定します。
  2. コマンドバーは、TopAppBar/BottomAppBarプロパティを使用して直接ページに設定することも、他のどのような方法でもビジュアルツリーの任意の場所に配置することができます。コマンドバーをページ上に直接設定するのではなく、グリッド内のどこかの子要素として設定する必要があります。そうしないと、コマンドバーの上にマウスを移動するとすぐにPointerExitedイベントが発生します。
<Page> 
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Grid PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited"> 
      <CommandBar x:Name="bar" IsSticky="True" VerticalAlignment="Bottom"> 
       <AppBarButton Icon="Accept" Label="Done"/> 
      </CommandBar> 
     </Grid> 
    </Grid> 
</Page> 
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e) 
{ 
    bar.IsOpen = true; 
} 

private void Grid_PointerExited(object sender, PointerRoutedEventArgs e) 
{ 
    bar.IsOpen = false; 
} 
+0

例を提供していないため申し訳ありませんが、私はそれがnessecaryないと思いました。私は1つを追加しました。 IsStickyをtrueに設定することは私の問題を解決することです。しかし、私はまだIsStickyが透明なグリッドを作成していない理由を混乱させています。本当に設定されている場合、このプロパティは "重く"却下することはできませんか? – fedab

+0

「スティッキー」は、アプリバーが「スティック」していることを意味し、離れたところで自動的に閉じることはありません。 –

関連する問題