Сведения о вопросе

Getthesound

16:33, 5th August, 2020

Теги

c#   wpf    

WPF Listbox стиль с кнопкой

Просмотров: 524   Ответов: 3

У меня есть 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>

Спасибо!



  Сведения об ответе

PIRLO

16:09, 15th August, 2020

Взгляните на 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


  Сведения об ответе

prince

12:12, 17th August, 2020

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

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

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

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

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


  Сведения об ответе

lesha

20:27, 3rd August, 2020

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

Public Event btnRemove()

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

RaiseEvent btnRemove()

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться