현재
<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 Likes
방법은 다양할 것 같습니다. 그 중에서도 현재의 소스코드와 가장 비슷하게 해보자면 아래처럼 해볼 수도 있을 것 같습니다.
<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 Likes
답변 감사합니다.
제가 리소스사전에 만들어서 적용시켜보았는데 우클릭을 눌러도 아무 변화가 없는데
혹시 어떤 문제일까요?
3 Likes
앗 저는 너무잘되는데, 기본 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 Likes
아! 버튼 메인 스타일에 ContextMenu를 추가해서 넣어줬더니
잘 작동하네요! 감사합니다
3 Likes