【问题标题】:Combobox ItemTemplate dont accept click组合框 ItemTemplate 不接受点击
【发布时间】:2015-06-15 05:45:10
【问题描述】:

我用 itemTemplate 制作了一个带有 Combobox 的用户控件。我为单击项目设置了一个事件触发器。但它不能完全工作。它不接受点击。在我的文本之前的模板或空白处。 这是我的代码

        <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>

它是一个绑定到包含命令和命令参数的对象列表的用户控件,单击每个项目时应引发一个命令。

【问题讨论】:

  • 你怎么知道它不接受你的点击?首先执行以下操作:设置 Grid Background="Transparent" ,没有背景颜色甚至透明的命中测试被忽略。
  • 我设置了 Background={x:Null} 但什么也没有。点击执行,但在项目的某些地方它不起作用
  • 不是 {x:Null} 我说的是“透明”
  • 谢谢,它变得更好了。但它不会在项目边界附近执行。

标签: c# wpf combobox click itemtemplate


【解决方案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>

仅供参考:IsHitTestVisibile 是一个标志,表明即使命中测试确实通过了,您也可以选择忽略它。

【讨论】:

  • 您确定这没有解决您的问题吗?但是网格上的背景只是部分解决了它..?
【解决方案2】:

ListBoxSelectionChanged 事件有什么问题? 你可以绑定到那个。

DataTemplate 适用于 data 而非 UI 事件。您使用数据模板来告诉 WPF 您希望如何显示数据。最多你可以拥有DataTriggers(它又属于data)。

如果您想捕获items 上的点击事件,请使用ItemContainerStyleItemContainerStyle 用于设置数据项容器的样式,在本例中为 ListBoxItem

这样的事情可能会有所帮助:

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

【讨论】:

  • 那行不通...交互触发器不是那种触发器..您在发布之前尝试过吗?
  • 谢谢,但 不能在 上设置
  • 好吧,我承认,我还没试过。但是,你得到它的笑话。这是为了说明。我会努力解决的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 2014-11-13
相关资源
最近更新 更多