2010-06-17 2 views
0

ControlTemplate을 사용하여 ListBoxItem의 스타일을 재정의하고 있지만, ListBoxItem 클릭 이벤트 처리기를 잃어 버렸습니다. ControlTemplate에 이벤트 처리기를 추가해야한다고 말하는 데 유용한 게시물을 찾았지만이를 수행하는 방법을 모르겠습니다.ControlTemplate에서 ListBoxItem을 클릭 할 때 이벤트를 트리거해야합니다.

어떤 도움을 주시면 & 방향을 알려드립니다!

답변

1

ListBoxItem에는 "클릭"이벤트가 없으므로 ControlTemplate을 추가 할 때 수행 한 작업이나 손실 된 기능이 명확하지 않습니다.

ControlTemplate에 버튼이있는 경우 Click 이벤트를 ContolTemplate 외부와 똑같이 설정할 수 있습니다. 여기 ListBoxItem의 콘텐츠 옆에 버튼을 표시 이외의 아무것도하지 않는 간단한 예, 그리고 그 버튼은 "OnClickMeButtonClicked"라는 이름의 이벤트 핸들러 호출

<Style TargetType="ListBoxItem"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ListBoxItem"> 
     <DockPanel> 
      <Button Content="ClickMe" Click="OnClickMeButtonClicked" /> 
      <ContentPresenter /> 
     </DockPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

당신이 당신의 ListBoxItem의가에 따라 다르게 표시 할 무엇을 의미하는 경우를 항목이 선택되었는지 여부에 관계없이 IsSelected에 트리거를 설정하면됩니다.

<ControlTemplate TargetType="ListBoxItem"> 
    <Border Name="Bd"> 
    <ContentPresenter /> 
    </Border> 

    <ControlTemplate.Triggers> 
    <Trigger Property="IsSelected" Value="true"> 
     <Setter TargetName="Bd" Property="Background" Value="Blue" /> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

첫 번째 코드 블록은 내가 원하는 것입니다. 내 ListBoxItems에 대한 ControlTemplate을 정의했지만 실제 컨트롤에 대한 정의가 없습니다. 내 지식만으로, 내가 이렇게 남겨두면 문제가 생길까요? 나는 WPF에 먼저 들어가기를 강요 당했다. 그래서 나는 내가 할 수있는만큼 배우고/이해하려고 노력했다. – TheGeekYouNeed

+0

귀하의 의견에 제기 한 질문을 이해하지 못했습니다. 정확히 말하면 "실제 컨트롤에 대한 정의가 없으며 스타일 만 정의해야합니다"는 의미입니다. 어떤 "실제 통제?" "정의"란 ControlTemplate 또는 다른 것을 의미합니까? –

+0

예 ControlTemplate에서의 의미입니다. 나는 스타일 만 정의하고 내용은 정의하지 않습니다. 코드 블록에서와 마찬가지로 ContentTemplate에는

0

정말로 마우스를 클릭 했습니까? 아니면 선택의 변화에 ​​반응하고 있습니까? 그렇다면 대신 ListBox.SelectionChanged를 사용할 수 있습니다.

그렇지 않으면 템플릿에 OnClick = ...을 추가하는 것만 큼 간단하다고 생각합니다. 발신자는 클릭 한 요소가됩니다.