/ / Combobox ItemTemplate не приймаю клацання - c #, wpf, combobox, click, template item

Combobox ItemTemplate не приймає click - c #, wpf, combobox, click, itemtemplate

Я зробив Usercontrol з Combobox зitemTemplate. Я встановлюю тригер події для натискання на пункт "Елемент". але це не повністю. він не приймає клацання. навколо шаблону чи порожнього місця перед моїм текстом. це мій код

        <Combobox>
<Combobox.ItemTemplate>
<DataTemplate>
<Grid Height="25" FlowDirection="RightToLeft">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition MinWidth="100" />
<ColumnDefinition Width="25" />
</Grid.ColumnDefinitions>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp">
<command:EventToCommand Command="{Binding Command}"
CommandParameter="{Binding CommandParameter}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Image Height="20" Width="25" Grid.Column="0" VerticalAlignment="Center"
HorizontalAlignment="Center" />
<TextBlock Text="{Binding Title}" Grid.Column="1" VerticalAlignment="Center" />
<TextBlock Grid.Column="2" />
</Grid>
</DataTemplate>
</Combobox.ItemTemplate>
</Combobox>

це контролера користувача, яка прив'язується до списку об'єктів, містить команду і параметр команд, при натисканні на кожен елемент повинна бути піднята одна команда.

Відповіді:

1 для відповіді № 1

Візуальним елементам потрібно призначити пензлик для того, щоб відбулося тестування хітів. (Я сказав, що це IsHitTestVisibile, щоб ви не переплутали двох).

Ви можете зробити наступне над вашим шаблоном ItemTemplate в контейнері, який розміщує його так:

<ComboBox>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}"> <!-- Or based on any other ComboboxItem style you have-->
<Setter Property="Background" Value="Transparent" />
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>

FYI: IsHitTestVisibile - це прапор, в якому йдеться про те, що навіть якщо тест на хіт пройшов, ви можете його знехтувати.


0 для відповіді № 2

Що не так з SelectionChanged подія ListBox? Ви можете пов'язувати це.

DataTemplate призначений для data не для UI події. Ви використовуєте шаблони даних, щоб повідомити WPF, як ви хочете відображати дані. Щонайбільше ви могли мати DataTriggers (до якої знову належать data)

Якщо ви хочете ввімкнути захоплення події клацання items, використовувати ItemContainerStyle. The ItemContainerStyle призначений для стилізації контейнера dataitem, який є ListBoxItem в цьому випадку.

Щось подібне може допомогти:

<Style TargetType="ListBoxItem">
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
</EventTrigger>
</Style.Triggers>
</Style>