无法处理ListView ItemTemplate中的按钮点击

时间:2015-09-16 08:59:23

标签: wpf xaml button win-universal-app

我有ListView个自定义ItemContainerItemTemplate。除其他控件外,ItemTemplate还包含一个按钮。每当我点击或点击按钮ListView时,就会选择整个项目,与预期的按钮点击或点击事件相反。我注意到按钮可单击的唯一时间是当我将鼠标光标放在按钮的顶部边框时(这也是我唯一一次获得默认鼠标悬停效果)。

这是XAML:

<Style TargetType="ListView" x:Key="SalesOrdersListViewStyle">
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="VerticalAlignment" Value="Top" />
    <Setter Property="SelectionMode" Value="Single" />
    <Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="ListViewItem">
                <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/>
                <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/>
                <!--<Setter Property="Background" Value="Transparent"/>-->
                <Setter Property="TabNavigation" Value="Local"/>
                <Setter Property="Padding" Value="12,6"/>
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="MinWidth" Value="{ThemeResource ListViewItemMinWidth}"/>
                <Setter Property="MinHeight" Value="{ThemeResource ListViewItemMinHeight}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <ListViewItemPresenter 
                                Foreground="{StaticResource HighlightPressedBrush}" 
                                CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                                ContentMargin="{TemplateBinding Padding}" 
                                CheckMode="Inline" 
                                ContentTransitions="{TemplateBinding ContentTransitions}" 
                                CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                                DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}" 
                                DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" 
                                DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}" 
                                DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}" 
                                FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}" 
                                FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}" 
                                HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                PointerOverForeground="{StaticResource HighlightPressedBrush}" 
                                PressedBackground="{ThemeResource HighlightAlternativePressedBrush}" 
                                PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" 
                                PointerOverBackground="{ThemeResource HighlightPointerOverBrush}" 
                                ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}" 
                                SelectedPressedBackground="{ThemeResource ControlBackgroundDarkBrush}" 
                                SelectionCheckMarkVisualEnabled="True" 
                                SelectedForeground="#FFFFFFFF" 
                                SelectedPointerOverBackground="{ThemeResource HighlightAlternativePointerOverBrush}" 
                                SelectedBackground="{ThemeResource HighlightPressedBrush}" 
                                VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="100" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock 
                        x:Uid="SalesOrderNumber" 
                        Grid.Row="0" Grid.Column="1" />
                    <TextBlock 
                        Grid.Row="0" Grid.Column="2" 
                        Text="{Binding Number}" />

                    <!-- TEST BUTTON THAT CANNOT BE TAPPED -->
                    <Button 
                        Grid.Row="0" Grid.RowSpan="4" Grid.Column="3"
                        HorizontalAlignment="Left" VerticalAlignment="Center" 
                        Background="Red"
                        IsHitTestVisible="True" 
                        Content="TEST" />

                    <TextBlock 
                        x:Uid="DeliveryMode" 
                        Grid.Row="1" Grid.Column="1" />
                    <TextBlock 
                        Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" 
                        Text="{Binding DeliveryMode}" /
                    <TextBlock 
                        x:Uid="ShippingDate" 
                        Grid.Row="2" Grid.Column="1" />
                    <TextBlock 
                        Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" 
                        Text="{Binding ShippingDate}" />
                    <TextBlock 
                        x:Uid="ProjectNumber" 
                        Grid.Row="3" Grid.Column="1" />
                    <TextBlock 
                        Grid.Row="3" Grid.Column="2" Grid.ColumnSpan="2" 
                        Text="{Binding ProjectNumber}" />
                </Grid>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

如何点击按钮或点击事件而不是选择项目?

注意:我刚评论了整个<Setter Property="ItemContainerStyle">,问题仍然存在。

2 个答案:

答案 0 :(得分:0)

我是新手,但你不能只添加一个按钮点击事件吗?

<Button 
    Grid.Row="0" Grid.RowSpan="4" Grid.Column="3"
    HorizontalAlignment="Left" VerticalAlignment="Center" 
    Background="Red"
    IsHitTestVisible="True"
    Click"btn_Click"
    Content="TEST" />

在代码中:

private void btn_Click(object sender, RoutedEventArgs e)
{
    // Do stuff
}

我希望我不会在这里说话,但我没有在任何地方看到你的点击事件。

答案 1 :(得分:0)

问题在于带有Grid.Column="2" Grid.ColumnSpan="2"的TextBlocks。将ColumSpan设置为1即可。