2012-10-17 3 views
0

다음은 User control in avalon dock and separate window에 대한 후속 질문입니다. 어려운 부분이 될 것이라고 생각했던 창은 멋지게 열렸습니다. 하지만 컨텍스트 메뉴를 변경하는 데 어려움이 있습니다.avalondock override contextmenu - ContextMenuElement 유형을 찾을 수 없습니다.

저는 WPF와 avalondock에 익숙하지 않고 아마도 간단 할 것입니다. 그러나 나는 그것을 놓치고 있습니다.

이전 질문으로는 http://avalondock.codeplex.com/SourceControl/changeset/view/96370#1749982을 예로 들었습니다. "ContextMenuElement를 찾을 수 없습니다."라는 오류가 발생하여 더 간단한 것으로 나타났습니다.

http://avalondock.codeplex.com/discussions/246250 -이 내용은 프랑스어 텍스트로 바뀌지 만 적응할 수 있습니다. 내가 리소스 사전에 얻을

Cannot find the type ContextMenuElement. Note that type names are case sensitive 

하고 메뉴 항목 등의 일부 명령을 가리키는 :

<MenuItem Header="Fermer" 

        Command="avalonDock:DocumentPaneCommands.CloseThis" /> 
을 나는 그대로 여전히 같은 오류가 일하러 후 붙여 넣기 사본을 시도하지 수

무엇이 누락 되었습니까?

편집 : 리소스 사전의 발췌 : 당신이 버전 1.3에 대한처럼 외모에 적응하려고 노력하고 있고 새로운 2.0 버전을 사용하고있을 수 있습니다

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:avalonDock="clr-namespace:AvalonDock;assembly=AvalonDock"> 

<!--Menu contextuel des onglets de l'avalonDock--> 
<ContextMenu x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type avalonDock:DockingManager}, ResourceId={x:Static avalonDock:ContextMenuElement.DocumentPane}}"> 
    <MenuItem Header="Fermer" 
        Command="avalonDock:DocumentPaneCommands.CloseThis" /> 
    <MenuItem Header="Fermer tout sauf cet élément" 
         Command="{Binding Path=DataContext.FermerCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/> 

    <Separator /> 

답변

2

코드입니다. DockingManager의 동작을 변경하는 방식이 많이 변경되어 이제는 더 간단 해졌습니다.

이 (v2.0.1320 테스트)를 DocumentPane의 문서에 대한의 ContextMenu를 대체 할 수있는 작은 샘플입니다 : 당신이 스타일

를 사용하여이 작업을 수행하는 방법을 볼 수 있습니다

<ad:DockingManager> 
    <ad:DockingManager.DocumentContextMenu> 
     <ContextMenu> 
      <MenuItem Header="DEMO"/> 
     </ContextMenu> 
    </ad:DockingManager.DocumentContextMenu> 
</ad:DockingManager> 

주제에

<Style x:Key="{x:Type avalonDock:DockingManager}" TargetType="{x:Type avalonDock:DockingManager}"> 
    <Setter Property="DocumentContextMenu" Value="{StaticResource AvalonDock_ThemeVS2010_DocumentContextMenu}"/> 
... 

나는 여전히 자신의 웹 사이트에서 테마 프로젝트의 복사본을 만들고 응용 프로그램에 대한 자신 만의 테마를 구축하는 것이 좋습니다. 그렇게하면 재사용 가능한 dll에 깔끔하게 저장되는 모든 적응 작업을 수행 할 수 있습니다.

+0

좋아요. 저는 하루 전보다 훨씬 더 많은 것을 이해합니다. 프로젝트 자체에서 테마가 어떻게 구성되는지, 내부에서 바인딩 및 명령 참조가 작동하는 방식을 확인할 수 있습니다. 나는 이것을 잠시 동안 하나의 proj로 유지하고 싶다. 나중에 재사용 가능한 dll을 탐색 할 수있다. 나는 또한 간단한 교체 문맥 메뉴를 가지고있다. 그러나 그것은 기능이 없다. 명령은 없다. 광고에 의해 제공되는 메뉴 항목에 대해 복제하고 싶습니다. Command = "{Binding Path = CloseCommand}"와 같이 어떻게 다시 사용할 수 있습니까? 광고 : 속성을 참조 할 수 없습니다. 아니면이 코드를 구현해야합니까? – andrew

+0

LayoutItemTemplate 또는 LayoutItemContainerStyle을 크게 변경하지 않으면 바인딩이 동일하게됩니다. xml 네임 스페이스 (예 : theme.xaml)를 설정하는 데 필요한 속성에 액세스하려면 Properties 네임 스페이스가 AvalonDock 어셈블리에 있어야합니다 (컨텍스트 메뉴에서 이름을 정의하기 만하면 다국어 지원이 필요하지 않으면 직접 네임 스페이스를 정의 할 수 있습니다) . – MrDosu

+0

아하 마침내 얻었습니다. 감사. – andrew