2013-05-27 36 views
0

我创建了ListBoxItems一个ListBox并添加MouseDown事件处理程序,以每个ListBoxItems的。显示ListBoxItems,但是当我点击ListBoxItem时,事件不会被触发。ListBoxItem的MouseUp事件犯规火

我怎么设置鼠标松开:

TrackedProcessList.ItemsSource = null; 
TrackedProcessList.ItemsSource = this.tracks; 

/*... some other code that doesn't matter ... */ 

ListBoxItem[] items = new ListBoxItem[TrackedProcessList.Items.Count]; 
for (int i = 0; i < TrackedProcessList.Items.Count; i++) 
{ 
    Object obj = TrackedProcessList.Items.GetItemAt(i); 
    //TrackedProcessList.UpdateLayout(); 
    ListBoxItem item = (ListBoxItem)(TrackedProcessList.ItemContainerGenerator.ContainerFromIndex(i)); 
    if (item != null) 
    { 
     item.MouseUp += new MouseButtonEventHandler(ListBoxItem_MouseUp_PostQuestion); 
     items[i] = item; 
    } 
} 

应该被调用的方法(但不是):

private void ListBoxItem_MouseUp_PostQuestion(object sender, EventArgs e) 
{ 
    MessageBox.Show("ListBoxItem_MouseUp_fired"); 
} 

我的XAML:

<ListBox x:Name="TrackedProcessList" Height="145" Width="605" ItemsSource="{Binding}" BorderThickness="1,0" IsSynchronizedWithCurrentItem="True"> 
    <DataTemplate> 
     <TextBlock MouseDown="ListBoxItem_MouseUp_PostQuestion" Text="{Binding Path=programName}" HorizontalAlignment="Stretch" ></TextBlock> 
    </DataTemplate> 
</ListBox> 

你有什么想法,失败可能是?没有错误。该事件似乎没有绑定到ListBoxItem。

+0

就像错字马克'item.MouseDown'应该是'item.MouseUp' – WiiMaxx

+0

你的权利。我装了它;-) – Laokoon

+1

你不能使用ListBox的'SelectionChanged'事件吗? – Jehof

回答

1

这是因为ListBoxItem已经处理了左,右键点击,这意味着你的事件处理程序将不会根据WPF路由事件的规则被触发。你要么必须分配PreviewMouseDown事件或添加事件处理程序处理事件:

lbi.AddHandler(ListBoxItem.MouseDownEvent, new MouseButtonEventHandler(MouseEvent), true); 
0
void OnListBox_Mouse_Down(object sender, MouseButtonEventArgs e) 
{ 
    e.Handled 
} 

void OnListBox_Mouse_Up(object sender, MouseButtonEventArgs e) 
{ 
    "Do Something"; 
} 
0

使用ContainedControl属性和设置您的活动:)

kryptonListBox1.ContainedControl.MouseDown += kryptonListBox1_MouseDown_1;