Как использовать событие щелчка в MaterialDesign:PackIcon в WPF?

#c# #wpf #material-design-in-xaml

#c# #wpf #material-design-in-xaml

Вопрос:

Я использовал materialDesign:PackIkon в своем приложении WPF.

это мой код в xaml для PackIcon

 <ListViewItem Background="White" Height="55" >
         <StackPanel Orientation="Horizontal">
             <materialDesign:PackIcon Kind="CardMembership" MouseDown="PackIconMember_MouseDown" Height="40" Width="25" Foreground="#FF0959A8" />
             <Button  x:Name="btnMember" Click="btnMember_Click" Content="Member" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="Black" FontSize="10" />
           </StackPanel>
  </ListViewItem>
  

У меня есть несколько PackIcon в моем xaml. каждый из них в другом listview.

я хочу, чтобы при нажатии пользователем на Icon событие обрабатывалось в PackIconMember_MouseDown

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

Есть идеи о том, что я должен с этим делать? или любое предложение по замене MouseDown события.

это работает только тогда, когда я нажимаю на значок синего цвета

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

если я нажимаю внутреннюю кнопку, значок пакета не отображается

  <Button Background="{x:Null}" BorderBrush="{x:Null}" Foreground="Black" Height="20" Width="25" Margin="10">
    <materialDesign:PackIcon MouseDown="PackIconMember_MouseDown" TouchDown="PackIconMember_MouseDown" Kind="CardMembership" />
 </Button>
  

Комментарии:

1. почему бы вам не обернуть значок внутри кнопки? и использовать реальное событие щелчка?

2. Если щелкнуть в том же месте, событие всегда должно вызываться. Что вы делаете в обработчике событий?

3. @ mm8 работает только тогда, когда я нажимаю на значок с синим пятном. дескриптор события — это событие для перехода к другому представлению

Ответ №1:

Установите Background свойство PackIcon в Transparent :

 <materialDesign:PackIcon Kind="CardMembership" MouseDown="PackIconMember_MouseDown" Height="40" Width="25" Foreground="#FF0959A8"
                         Background="Transparent" />
  

Это также должно фиксировать щелчки по «пустым» частям значка.

Ответ №2:

Сделайте Значок как часть кнопки, как:

 <Button  x:Name="btnMember" Click="btnMember_Click" Content="Member" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="Black" FontSize="10" >
     <materialDesign:PackIcon Kind="CardMembership" Height="40" Width="25" Foreground="#FF0959A8" />
</Button
  

Но вы должны установить маржу