2011-01-18 4 views
1

이것은 아마도 쉬운 해결 방법 일지 모르지만 나는 이벤트에 익숙하지 않아서 물어볼 것입니다.WPF의 버블 링 이벤트? 간단한 질문

ListBoxItem이있는 ListBox가 있습니다. 이러한 ListBoxItem은 변경 될 수 있도록 데이터 소스에 바인딩됩니다. MouseDown 동작이 이러한 ListBoxItem 중 하나에서 수행 될 때 발생해야하는 MouseDown 이벤트가 필요합니다 (드래그 앤 드롭을 수행하기 때문에). 값이 변경되기 때문에, 나는 같은 XAML에서 함께 이벤트를 연결할 것으로 예상 할 수없는

<ListBox Name="ListBox1"> 
    <ListBoxItem MouseDown="MouseDownEventName">Item A</ListBoxItem> 
    <ListBoxItem MouseDown="MouseDownEventName">Item B</ListBoxItem> 
    <ListBoxItem MouseDown="MouseDownEventName">Item C</ListBoxItem> 
</ListBox> 

이 내가 정적 값이 있다면 쉬운 것입니다,하지만 목록 상자의 값이 변경 때문에, 내가 선호 다음 ListBoxItem의이 선택 될 때, 그것은 버블이 MouseDownEventName까지 이벤트 것

<ListBox Name="ListBox1" MouseDown="MouseDownEventName"> 
    //Binded Values 
</ListBox> 

그런 다음 XAML을 작성하고 내가 그 시간에 ListBox1.SelectedItem을 잡을 수 있으며, 문제는,이 권리를 시도하고있다 지금은 작동하지만 작동하지 않습니다. MouseDown을 처리하는 코드는 다음과 같습니다. MouseDown은 해당 항목이 MouseDown 된 것을 나타 내기 위해 즉시 레이블 내용을 다시 작성하는 것입니다.

public partial class UserControl1 : UserControl 
    { 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    private void ListBox_MouseDown(object sender, RoutedEventArgs e) 
    { 
     ListBox box = (ListBox)sender; 
     if (box != null && box.SelectedItem != null) 
     { 

      DragDrop.DoDragDrop(box, ItemListBox.SelectedItem, DragDropEffects.Move); 
      label1.Content = "MouseDown Event Fired"; 
     } 
    } 
} 

답변

3

XAML을 사용하면 양식에 포함 된 여러 유형의 템플릿을 제공 할 수 있습니다. 예를 들어이 경우 특정 이벤트 처리기에서 ListBoxItem의 불을 끌 수 있습니다. 이것은 XAML 마크 업 코드의 대부분이다 (자세한 내용은 여기 : How to catch Click on ListboxItem when the item is templated?를)

<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
... 
</ListBox> 

전에 확인하는 또 다른 것은 문제가있다 있는지 확인하려고 다른 뭔가로 DragDrop.DoDragDrop() 메서드 호출을 변경하는 것입니다 그 방법으로 할 수 있습니다. Label의 내용이 변하기 때문에 그 방법과 관련이 있다고 생각합니다.

+0

이렇게 정확하게 이해하고 있는지 확인하기 위해 내 목록을 작성할 원본을 지정하고 구조를 지정하고 각 이벤트를 트리거 할 수있는 이벤트를 선언 할 수 있습니까? 그것은 BTW 일했다,하지만 난 그냥 옳은 이유를 위해 그것을 이해하고 있는지 확인하고 싶습니다 – TheJediCowboy

+0

그것을 듣고 다행! 그래, 근본적으로 그 생각이야. CSS와 같은 HTML 코드를 상상해보십시오 - 수정하려는 태그의 종류를 지정하고 태그에 다른 속성과 속성을 적용하십시오. 이 경우 각 ListBoxItem에 대해 EventSetter를 추가했습니다. 이렇게하면 각 ListBoxItem에 대해 Clicked 이벤트 처리기를 지정하는 수고를 덜 수 있습니다. –

관련 문제