我使用带有itemTemplate的Combobox进行了Usercontrol。我设置了一个事件触发器,用于单击Item。但它完全不起作用。它接受点击。模板周围或我文本前的空位。 这是我的代码
<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>
它是一个绑定到对象列表的usercontrol包含Command和commandparameter,点击每个项目时应该引发一个命令。
答案 0 :(得分:1)
需要为视觉元素分配画笔,以便进行命中测试。 (我确实说过IsHitTestVisibile所以你不会混淆两者)。
您可以在托管它的Container中的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>
仅供参考:IsHitTestVisibile是一个标志,表明即使Hit测试确实通过,您也可以选择忽略它。
答案 1 :(得分:0)
SelectionChanged
ListBox
事件出了什么问题?
你可以绑定到那个。
DataTemplate适用于data
不适用于UI
个事件。您可以使用数据模板告诉WPF您希望如何显示数据。最多可以有DataTriggers
(同样属于data
)。
如果您想在items
上捕获点击事件,请使用ItemContainerStyle
。 ItemContainerStyle
用于样式化dataitem的容器,在这种情况下为ListBoxItem
。
这种东西可能会有所帮助:
<Style TargetType="ListBoxItem">
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
</EventTrigger>
</Style.Triggers>
</Style>