Я зробив 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>