WPF Button.Contextmenu

Button안에 ContextMenu가 있고 좌클릭이던 우클릭이던 Contextmenu를 작동하도록 작성했는데

  1. 우클릭(Button) → 좌 또는 우클릭 (Contextmenu)를 해야
  2. 좌클릭(Button) → 좌 또는 우클릭 (Contextmenu)이 작동이 되네요

1번 과정을 하지 않으면 2번에서 Contextmenu클릭시 반응이 없네요.

<Button Content="Option" HorizontalAlignment="Center" VerticalAlignment="Center" 
                x:Name="OptionBtn"
                
                Cursor="Hand" Width="163" Grid.Row="1" 
                DataContext="{Binding DataViewModel}" >
            <Button.ContextMenu>
                <ContextMenu x:Name="OptionContextmenu" >
                    <MenuItem Header="Edit" Command="{Binding Edit_Command}" />                            
                    <MenuItem Header="Add"   Command="{Binding Add_Command}" />                                      
                    <MenuItem Header="List" Command="{Binding List_Command}" />                        
                </ContextMenu>
            </Button.ContextMenu>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Click">
                    <i1:ChangePropertyAction TargetName="OptionContextmenu"
                                             PropertyName="IsOpen"
                                             Value="True"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>

다음과 같은데 1번 행동을 무조건해야지 2번이 작동하네요 ㅠㅠ

1개의 좋아요

WPF 질문이어서 윈도우 데스크탑 카테고리로 글을 이동해드렸습니다.

2개의 좋아요

아하 넵 감사합니다

1개의 좋아요

다음과 같이 스토리보드를 활용해도 됩니다.

<Button Grid.Row="2" Content="Option" HorizontalAlignment="Center" VerticalAlignment="Center" 
                x:Name="OptionBtn"
                Cursor="Hand" Width="163">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames Storyboard.TargetName="OptionContextmenu"
                                                                Storyboard.TargetProperty="IsOpen">
                                    <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True"/>
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Button.Triggers>

            <Button.ContextMenu>
                <ContextMenu x:Name="OptionContextmenu">
                    <MenuItem Header="Edit"/>
                    <MenuItem Header="Add"/>
                    <MenuItem Header="List"/>
                </ContextMenu>
            </Button.ContextMenu>
</Button>
3개의 좋아요

앗 감사합니다! 적용해볼께요!

1개의 좋아요

보실분이 계실지 모르겠지만 일단 저는 아래코드처럼 해결했습니다!

xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
    

<Button x:Name="MessageBtn" Style="{StaticResource menuButton}">
                    <StackPanel Orientation="Horizontal">
                        <fa:IconImage Icon="EnvelopeOpenText" Style="{StaticResource menuButtonIcon}" />
                        <TextBlock Style="{StaticResource menuButtonText}" Text="Messages" />
                    </StackPanel>
                    <b:Interaction.Triggers>
                        <b:EventTrigger EventName="Click">
                            <b:ChangePropertyAction TargetObject="{Binding ContextMenu, ElementName=MessageBtn}"
                                                    PropertyName="PlacementTarget" Value="{Binding ElementName=MessageBtn,Mode=OneWay}"/>
                            <b:ChangePropertyAction TargetObject="{Binding ContextMenu, ElementName=MessageBtn}"
                                                    PropertyName="IsOpen"
                                                    Value="True"/>
                        </b:EventTrigger>
                    </b:Interaction.Triggers>
                    <!--  ContextMenu  -->
                    <Button.ContextMenu>
                        <ContextMenu >
                            <MenuItem Header="Menu1" Command="{Binding Menu1Command}"/>
                            <MenuItem Header="Menu2" />
                            <MenuItem Header="Menu3" />
                        </ContextMenu>
                    </Button.ContextMenu>
                </Button>
5개의 좋아요