방법: 공유되는 ContextMenu 만들기
업데이트: 2007년 11월
ContextMenu를 리소스로 정의한 후 컨트롤의 ContextMenu 속성을 ContextMenu에 대한 참조로 설정하여 둘 이상의 컨트롤에서 ContextMenu를 공유할 수 있습니다. x:Shared 특성 속성을 설정하면 ContextMenu 하나를 여러 컨트롤이 공유할지 또는 각 컨트롤에 고유한 ContextMenu를 사용할지 지정할 수 있습니다.
예제
다음 예제에서는 ContextMenu를 리소스로 만들고 이에 대한 참조를 컨트롤 네 개에 할당합니다. 이 예제에서는 ContextMenu의 x:Shared 특성을 true로 설정하기 때문에 컨트롤 네 개가 ContextMenu의 동일한 인스턴스를 공유합니다. 컨트롤 하나에서 ContextMenu의 첫 번째 MenuItem을 선택한 후 다른 컨트롤의 ContextMenu에도 해당 MenuItem이 선택되어 있는지 확인하여 결과를 테스트해 볼 수 있습니다.
<ContextMenu x:Key="SharedInstanceContextMenu" x:Shared="True">
<MenuItem Header="This MenuItem is checkable" IsCheckable="True" />
<Separator/>
<MenuItem Header="This is a regular MenuItem" />
</ContextMenu>
...
<Button Margin="0,5,0,0" Background="LightBlue"
Content="This Button has a ContextMenu"
ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
<Button Background="Pink"
Content="This Button has the same ContextMenu"
ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
<CheckBox BorderBrush="Red"
Content="This Check Box has the same ContextMenu"
ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
<CheckBox BorderBrush="Green"
Content="This Check Box has the same ContextMenu"
ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
다음 예제에서는 ContextMenu를 리소스로 만들고 이에 대한 참조를 컨트롤 네 개에 할당합니다. 이 예제에서는 ContextMenu의 x:Shared 특성을 false로 설정하기 때문에 각 컨트롤에 ContextMenu의 새 인스턴스가 사용됩니다. 컨트롤 하나에서 ContextMenu의 첫 번째 MenuItem을 선택한 후 다른 컨트롤의 ContextMenu에는 해당 MenuItem이 선택되지 않았는지 확인하여 결과를 테스트해 볼 수 있습니다.
<ContextMenu x:Key="NonsharedInstanceContextMenu" x:Shared="False">
<MenuItem Header="This MenuItem is checkable" IsCheckable="true" />
<Separator/>
<MenuItem Header="This is a regular MenuItem" />
</ContextMenu>
...
<Button Background="LightBlue" Margin="0,5,0,0"
Content="This Button has a ContextMenu"
ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
<Button Background="Pink"
Content="This Button has the same ContextMenu"
ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
<CheckBox BorderBrush="Red"
Content="This Check Box has the same ContextMenu"
ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
<CheckBox BorderBrush="Green"
Content="This Check Box has the same ContextMenu"
ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
전체 샘플을 보려면 컨트롤 간에 공유되는 ContextMenu 샘플을 참조하십시오.