WPF Control의 종류에 따라 바뀌는 ContextMenu 질문드립니다

현재

<Window.ContextMenu>
    <ContextMenu>
        <MenuItem Header="이동"/>
        <MenuItem Header="삭제"/>
        <Separator Style="{StaticResource Separator}"/>
        <MenuItem Header="복사"/>
        <MenuItem Header="붙여넣기">
    </ContextMenu>
</Window.ContextMenu>

를 사용해서 우클릭을 하면 ContextMenu를 나오게 사용하고있습니다.
만들다보니 control이나 Target에 따라 contextmenu가 바뀌게 하고싶은데
모든 Control에다가 하나하나 ContextMenu를 설정하는건 아닌 것 같아서
혹시 좋은 방법이 있는지 질문드립니다.

예를들어 클릭 대상이 버튼이면

<Window.ContextMenu>
    <ContextMenu>
        <MenuItem Header="버튼"/>
        <MenuItem Header="버튼1"/>
        <MenuItem Header="붙여넣기">
    </ContextMenu>
</Window.ContextMenu>

Label이면

<Window.ContextMenu>
    <ContextMenu>
        <MenuItem Header="라벨"/>
        <MenuItem Header="복사"/>
        <MenuItem Header="붙여넣기">
    </ContextMenu>
</Window.ContextMenu>

등등 바뀌게 하고싶습니다.

3개의 좋아요

방법은 다양할 것 같습니다. 그 중에서도 현재의 소스코드와 가장 비슷하게 해보자면 아래처럼 해볼 수도 있을 것 같습니다.

<ContextMenu x:Key="ButtonContextMenu">
    <MenuItem Header="버튼"/>
    <MenuItem Header="버튼1"/>
    <MenuItem Header="붙여넣기"/>
</ContextMenu>

<ContextMenu x:Key="LabelContextMenu">
    <MenuItem Header="라벨"/>
    <MenuItem Header="복사"/>
    <MenuItem Header="붙여넣기"/>
</ContextMenu>

<Style TargetType="Button">
    <Setter Property="ContextMenu" Value="{StaticResource ButtonContextMenu}"/>
</Style>

<Style TargetType="Label">
    <Setter Property="ContextMenu" Value="{StaticResource LabelContextMenu}"/>
</Style>
6개의 좋아요

답변 감사합니다.
제가 리소스사전에 만들어서 적용시켜보았는데 우클릭을 눌러도 아무 변화가 없는데

혹시 어떤 문제일까요?

3개의 좋아요

앗 저는 너무잘되는데, 기본 WPF Application (NET 8.0) 프로젝트에서 아래 App.xaml, MainWindow.xaml 각각 구현된 소스코드 한번 비교해보시겠어요~

<Application x:Class="ContextMenuTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:ContextMenuTest"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ContextMenu x:Key="ButtonContextMenu">
            <MenuItem Header="버튼"/>
            <MenuItem Header="버튼1"/>
            <MenuItem Header="붙여넣기"/>
        </ContextMenu>

        <ContextMenu x:Key="LabelContextMenu">
            <MenuItem Header="라벨"/>
            <MenuItem Header="복사"/>
            <MenuItem Header="붙여넣기"/>
        </ContextMenu>

        <Style TargetType="Button">
            <Setter Property="ContextMenu" 
                    Value="{StaticResource ButtonContextMenu}"/>
        </Style>

        <Style TargetType="Label">
            <Setter Property="ContextMenu" 
                      Value="{StaticResource LabelContextMenu}"/>
        </Style>
    </Application.Resources>
</Application>

<Window x:Class="ContextMenuTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ContextMenuTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <Button Content="Button"/>
        <Label Content="Label"/>
    </StackPanel>
</Window>
4개의 좋아요

아! 버튼 메인 스타일에 ContextMenu를 추가해서 넣어줬더니
잘 작동하네요! 감사합니다

3개의 좋아요