2012-03-16 2 views
0

이벤트 핸들러에 listbox의 ItemContainerStyle로 바인드 된 contextmenu menuitem을 지정하는 데 문제가 있습니다. 응용 프로그램에서 마우스 오른쪽 버튼을 클릭하고 목록 항목을 호출하면 헤더 이름과 system.window.style이라는 중첩 항목을 보여주는 컨텍스트 메뉴가 나타납니다. 의 MenuItem 중첩Contextmenu menuitem이 제대로 호출되지 않습니다.

  <ListBox HorizontalAlignment="Left" Margin="6,90,0,0" Name="listbox1" Width="189" FontSize="14" Height="416" VerticalAlignment="Top"> 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="ContextMenu"> 
         <Setter.Value> 
          <ContextMenu> 
           <MenuItem Header="Delayed Kick" > 
            <Style TargetType="MenuItem"> 
             <EventSetter Event="Click" Handler="DelayedKick_Click"/> 
            </Style> 
           </MenuItem> 
          </ContextMenu> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListBox.ItemContainerStyle> 
     </ListBox> 

답변

1

모든 이유를 메뉴 항목으로 표시되고있다 하위 메뉴 아이템이 될 수 있습니다 해당 항목의 내용,로 해석됩니다 다음과 같이

내 XAML 코드입니다.

다음 예제는 예상대로 작동합니다. 적절한 위치에있는 Resource 요소에 MenuItem 스타일을 배치합니다.

<Grid.Resources> 
    <Style TargetType="MenuItem"> 
     <EventSetter Event="Click" Handler="DelayedKick_Click"/> 
    </Style> 
</Grid.Resources> 

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
     <Setter Property="ContextMenu"> 
      <Setter.Value> 
       <ContextMenu> 
        <MenuItem Header="Delayed Kick" /> 
       </ContextMenu> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 
+0

다른 컨텍스트 메뉴 메뉴 항목에 다른 이벤트 처리기를 지정하려면 어떻게해야합니까? – paradox

+1

당신은 지금 내 지식에 과세하고있다. (나는 당신이 자원으로 여러 아이템 컨테이너 스타일을 가질 필요가 있다고 생각한다.) 각각은 서로 위에 명시된 다른 명시적인 MenuItem 스타일을 가질 것이다. ListBox.ItemContainerStyleSelector를 사용하여 각 목록 상자 항목의 올바른 스타일을 선택합니다. – Phil

관련 문제