2011-01-21 10 views
0

그래서 내 Windows 응용 프로그램에 WPF Windows가 많이 있습니다. 각 창에 하나의 항목이있는 컨텍스트 메뉴가 있어야합니다 (아래 코드 참조). 그러나, 나는이 코드를 복사하여 모든 곳에 붙여 넣기를 좋아하지 않습니다. 어떻게 든 WPF Window 클래스를 확장하고 (PrintableWindow라고 부름) 어떻게 든 모든 윈도우를 PrintableWindow의 확장으로 만들 싶습니다.이게 가능합니까 ???WPF 확장 창

<Window.ContextMenu> 
    <ContextMenu> 
     <ContextMenu.Items> 
      <MenuItem Header="Print" 
         Click="mnuPrint_Click"> 
      </MenuItem> 
     </ContextMenu.Items> 
    </ContextMenu> 
</Window.ContextMenu> 

답변

1

이 작업을 수행하기 위해 창을 확장 할 필요는 없으며 모든 창에 대해 전역 스타일을 만들었습니다. 귀하의 app.xaml 파일에서

:

<Style TargetType="{x:Type Window}"> 
    <Setter Property="ContextMenu"> 
     <Setter.Value> 
      <ContextMenu> 
       <ContextMenu.Items> 
        <MenuItem Header="Print" Command="Print" /> 
       </ContextMenu.Items> 
      </ContextMenu> 
     </Setter.Value> 
    </Setter> 
</Style> 

특정 창에서 인쇄 할 경우이 창에서 인쇄 명령에 대한 핸들러를 작성해야합니다. 뷰 모델을 사용하는 경우 명령에 바인딩 할 수 있습니다.

+0

그냥 추가하고 싶습니다. Window 스타일에 x : Key 속성을 설정하고 각 Window에 Style을 명시 적으로 지정해야합니다. Window가 TargetType에 의해 애플리케이션 리소스에서 스타일을 자동으로 선택하지 않는다는 것은 알려진 문제입니다. –

0

Window에서 유래하고 Window 대 당신의 PrintableWindow에서 파생 다른 Window 인스턴스를 수정 PrintableWindow라는 자신의 Window 클래스를 만듭니다. 이런 식으로 모든 Window 인스턴스는 ContextMenu 및 처리기가 연결된 PrintableWindow 유형이됩니다.

+0

이것은 거의 불가능한 것처럼 보입니다! – MadSeb

+0

"불가능"하지는 않지만 Window 클래스를 확장하는 것은 매우 어렵습니다. – MadSeb

+0

이미 완성 된 백필 코드는 리팩토링 노력을 필요로하지만 일단 "잡았"면 난이도가 어디에서 나타 났는지 확신 할 수 없습니까? –