Стиль списка WPF с кнопкой - PullRequest
       20

Стиль списка WPF с кнопкой

7 голосов
/ 26 августа 2008

У меня есть ListBox, стиль которого определен для ListBoxItems. Внутри этого стиля у меня есть несколько ярлыков и кнопка. Одной этой кнопкой я хочу определить событие клика, которое может быть обработано на моей странице (или любой странице, которая использует этот стиль). Как создать обработчик событий на моей странице WPF для обработки события из моего стиля ListBoxItems?

Вот мой стиль (только затронутый код):

<Style x:Key="UsersTimeOffList"  TargetType="{x:Type ListBoxItem}">
... 
<Grid>
<Button x:Name="btnRemove" Content="Remove" Margin="0,10,40,0" Click="btnRemove_Click" />
</Grid>
</Style>

Спасибо!

Ответы [ 3 ]

10 голосов
/ 26 августа 2008

Взгляните на RoutedCommand s.

Определите вашу команду в myclass где-то следующим образом:

    public static readonly RoutedCommand Login = new RoutedCommand();

Теперь определите вашу кнопку с помощью этой команды:

    <Button Command="{x:Static myclass.Login}"  />  

Вы можете использовать CommandParameter для дополнительной информации ..

Теперь последнее, но не менее важное: начинайте слушать вашу команду:

В конструкторе класса, который вы хотите сделать несколько хороших вещей, вы помещаете:

    CommandBindings.Add(new CommandBinding(myclass.Login, ExecuteLogin));

или в XAML:

   <UserControl.CommandBindings>
        <CommandBinding Command="{x:Static myclass.Login}" Executed="ExecuteLogin" />
   </UserControl.CommandBindings>

И вы реализуете делегат, необходимый для CommandBinding:

    private void ExecuteLogin(object sender, ExecutedRoutedEventArgs e)
    {
          //Your code goes here... e has your parameter!
    }

Вы можете начать слушать эту команду повсюду в вашем визуальном дереве!

Надеюсь, это поможет

PS Вы также можете определить CommandBinding с делегатом CanExecute, который даже отключит вашу команду, если CanExecute скажет:

PPS Вот еще один пример: RoutedCommands в WPF

6 голосов
/ 10 октября 2008

Как сообщает Arcturus, RoutedCommands - отличный способ для достижения этой цели. Однако если в DataTemplate есть только одна кнопка, то это может быть немного проще:

На самом деле вы можете обработать событие Click любой кнопки из хоста ListBox, например:

<ListBox Button.Click="removeButtonClick" ... />

Любые кнопки, содержащиеся в ListBox, будут вызывать это событие при нажатии на них. Из обработчика событий вы можете использовать e.OriginalSource, чтобы получить ссылку на кнопку, на которой была нажата кнопка.

Очевидно, что это слишком упрощенно, если ваши ListBoxItems имеют более одной кнопки, но во многих случаях это работает просто отлично.

0 голосов
/ 26 августа 2008

Вы можете создать пользовательский элемент управления (.ascx) для размещения списка. Затем добавьте публичное событие для страницы.

Public Event btnRemove()

Затем на событие нажатия кнопки в пользовательском контроле

RaiseEvent btnRemove()

Вы также можете передавать объекты через событие, как и любой другой метод. Это позволит вашему пользовательскому элементу управления сообщать вашей странице, что нужно удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...