2016-12-12 25 views
1

私は、ボタン付きのContextMenuを使用します。 特別なButtonが押されるたびにContextMenuを閉じたいと思います。 "StaysOpenOnClick"と呼ばれるMenuItemの可能性を見ました。これは問題なく動作します。ContextMenuのWPFボタンにはStaysOpenOnClickが必要です

これは私がボタンに必要なものです。特に誰かが助けることができるなら、XAMLの唯一の解決策があります。

ありがとうございます。

+0

:「設定」ボタンの名前? –

答えて

0

あなたはBooleanAnimationUsingKeyFramesを使用してのIsOpenプロパティをアニメーション化することでのContextMenuを閉じることができます。これは、XAML唯一のソリューションです:

<Grid Background="Yellow" Width="50" Height="50"> 
    <Grid.Resources> 
     <Storyboard x:Key="sb"> 
      <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen"> 
       <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> 
      </BooleanAnimationUsingKeyFrames> 
     </Storyboard> 
    </Grid.Resources> 
    <Grid.ContextMenu> 
     <ContextMenu x:Name="contextMenu"> 
      <MenuItem> 
       <MenuItem.Header> 
        <Button Content="TheButton" Click="OnButtonClick" /> 
       </MenuItem.Header> 
      </MenuItem> 
      <ContextMenu.Triggers> 
       <EventTrigger RoutedEvent="ButtonBase.Click"> 
        <BeginStoryboard Storyboard="{StaticResource sb}" /> 
       </EventTrigger> 
      </ContextMenu.Triggers> 
     </ContextMenu> 
    </Grid.ContextMenu> 
</Grid> 

このソリューションは動作しますが、のContextMenuは、今の私のContextMenu内のすべてのボタンのため閉鎖されます。私はただそれが "設定"という1つのボタンで閉じられるようにしたかった。あなたがEventTriggerのsourcenameにプロパティを設定することができ、この場合には

X:今のようなあなたのXAMLを見て何

<Grid Background="Yellow" Width="50" Height="50"> 
     <Grid.Resources> 
      <Storyboard x:Key="sb"> 
       <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen"> 
        <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> 
       </BooleanAnimationUsingKeyFrames> 
      </Storyboard> 
     </Grid.Resources> 
     <Grid.ContextMenu> 
      <ContextMenu x:Name="contextMenu"> 
       <MenuItem> 
        <MenuItem.Header> 
         <Button Content="Settings" x:Name="settingsButton" /> 
        </MenuItem.Header> 
       </MenuItem> 
       <MenuItem> 
        <MenuItem.Header> 
         <Button Content="About" /> 
        </MenuItem.Header> 
       </MenuItem> 
       <ContextMenu.Triggers> 
        <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="settingsButton"> 
         <BeginStoryboard Storyboard="{StaticResource sb}" /> 
        </EventTrigger> 
       </ContextMenu.Triggers> 
      </ContextMenu> 
     </Grid.ContextMenu> 
</Grid> 
+0

後ろのコードを削除ボタンのClickイベントは必要ないと思います。とにかく、このソリューションは動作しますが、ContextMenuはContextMenuのすべてのボタンで閉じられます。私はただそれが "設定"という1つのボタンで閉じられるようにしたかった。 – user1818797

+0

私の編集した回答をご覧ください。それがあなたを助けるならばそれを受け入れて投票することを忘れないでください:) – mm8

+0

これは私のために働く..ありがとう! :) – user1818797

0

私はあなたが後にしているものを完全にわからないんだけど、ここではボタンでコンテキストメニューです:

<TextBlock 
    Text="Hello, world!"> 
    <TextBlock.ContextMenu> 
     <ContextMenu x:Name="contextMenu"> 
      <MenuItem> 
       <MenuItem.Header> 
        <Button Content="MyButton" Click="OnMenuButtonClick" /> 
       </MenuItem.Header> 
      </MenuItem> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 

あなたは次のようにボタンのクリックを扱う場合は、コンテキストメニューを閉じます。

private void OnMenuButtonClick(object sender, RoutedEventArgs e) 
{ 
    contextMenu.IsOpen = false; 
} 

(未XAMLのみのソリューション、しかし。)

+0

ボタンを切り替えてボタンを切り替えると、IsOpenプロパティにバインドできるはずです – MikeT

関連する問題