Бурлящие события в WPF?Простой вопрос - PullRequest
1 голос
/ 18 января 2011

Возможно, это действительно простое исправление, но я неопытен в работе с событиями, поэтому я просто собираюсь спросить его.

У меня есть ListBox с ListBoxItems.Эти ListBoxItems будут связаны с источником данных, поэтому они будут меняться.Мне нужно, чтобы событие MouseDown вызывалось при выполнении действия MouseDown с любым из этих объектов ListBoxItem (потому что я выполняю перетаскивание).Так как значения меняются, я не могу ожидать связать события вместе в XAML, как показано ниже:

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

Это было бы легко, если бы у меня были статические значения, но так как значения в ListBox изменятся, япредпочел бы написать следующий XAML

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

Затем, когда выбран ListBoxItem, он будет выдавать сообщение о событии до этого MouseDownEventName, и я могу получить ListBox1.SelectedItem в то время, проблема вЯ пытаюсь это прямо сейчас, но это не работает.У меня есть следующий код для обработки 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";
        }
    } 
}

1 Ответ

3 голосов
/ 18 января 2011

Используя XAML, вы можете предоставить шаблон для различных типов, содержащихся в форме.Например, в этом случае вы можете указать, что ListBoxItem запускает определенный обработчик событий.Это основная часть кода разметки XAML (подробности можно найти здесь: Как перехватить Нажмите на ListboxItem, когда элемент является шаблонным? )

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

Еще одна вещь, которую необходимо проверить перед, - попробоватьи измените вызов метода DragDrop.DoDragDrop () на что-то другое, чтобы увидеть, связана ли проблема с этим методом.Поскольку содержание Label меняется, я думаю, что оно как-то связано с этим методом.

...