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๊ฐœ์˜ ์ข‹์•„์š”