1

는 다음과 같은 마크 업을 준수 해주십시오있는 StackOverflowException이 발생합니다.

스타일은 TreeViewItem (또는 생성 된 트리 내용의 경우 DataTemplate)에 첨부 된 ContextMenu의 메뉴 항목에 적용됩니다. 마우스 오른쪽 버튼을 놓으면 컨텍스트 메뉴가 열려 있기 때문에 예외가 발생합니다. ContextMenu에 대한 사용 사례

하나는 :

<DataTemplate x:Key="TviChaptersHeaderTemplate"> 
<StackPanel Orientation="Horizontal" Margin="0,2,0,2"> 
    <Image Margin="2,0,0,0" Width="16" Height="16" Source="\Icons\pages.png" /> 
      <TextBlock Text="{Binding}" Margin="5,0" /> 

    <StackPanel.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="Add Chapter" 
           Style="{StaticResource STYLE}" /> 
       </ContextMenu> 
      </StackPanel.ContextMenu> 
</StackPanel> 
</DataTemplate> 

예외는 헤더 템플릿 내부의 <ContentPresenter /> 태그에 고립되었습니다. 주석 처리하면 예외가 지워집니다. 무슨 일 이니?

+0

스택 오버플로가 재현 될 수 있습니다. 그러나, 당신이 달성하고자하는 것은 분명하지 않습니다. 이런 식으로'ContentPresenter'를 사용하려는 이유를 설명해 주시겠습니까? –

+0

Luke-이 예제에 표시된 HeaderTemplate은 문제를 강조 표시하기 위해 무력화되었습니다. 그러나 ContentPresenter는 실제로 프로덕션 코드의보다 복잡한 컨텐트 내에 중첩되어 있습니다. –

+0

당신은 내 질문에 대답하지 않았습니다. * 왜 * 당신은이 방식으로'ContentPresenter '를 사용해야합니까? –

답변

2

내가 ContentPresenter 전체 MenuItem 보유하고 믿고, 그래서 당신은 기본적으로 설정하는 중첩 된

<MenuItem> 
    <Header> 
     <MenuItem> 
      <Header> 
       ... etc. 

즉, 정확한 구문되지 않을 수도 있습니다 (<ContentPresenter Content="{TemplateBinding Content}" /> 같은 것을 사용해보십시오,하지만 당신은 기본적으로 Content에 결합 할 ContentPresenter 일부분, 전체가 아님)