Combobox ItemTemplate不接受点击

时间:2015-06-15 05:45:10

标签: c# wpf combobox click itemtemplate

我使用带有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,点击每个项目时应该引发一个命令。

2 个答案:

答案 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上捕获点击事件,请使用ItemContainerStyleItemContainerStyle用于样式化dataitem的容器,在这种情况下为ListBoxItem

这种东西可能会有所帮助:

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