在触摸设备上滚动/拖动时如何在DataGridRows的颜色上清除鼠标

我想在WPF应用程序(即触摸设备和台式机)上使用DataGrid。

在台式机上,DataGrid样式很好,但是在触摸设备上,当滚动/拖动DataGrid时,DataGridRow上会留下“鼠标悬停”的颜色。

如果可能,如何在滚动/拖动DataGrid时清除“鼠标悬停”颜色。

这是我的DataGrid的样式和模板代码。

    <Style x:Key="DataGridStyle" TargetType="{x:Type DataGrid}">
        <Setter Property="Background" Value="{Dynamicresource DataGridBackgroundBrush}"/>
        <Setter Property="Foreground" Value="{Dynamicresource TextBrush}"/>
        <Setter Property="BorderBrush" Value="{Dynamicresource DataGridOutsideFrameBorderBrush}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"/>
        <Setter Property="ColumnWidth" Value="SizeToCells"/>
        <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
        <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
        <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
        <Setter Property="AutoGenerateColumns" Value="False"/>
        <Setter Property="GridLinesVisibility" Value="None"/>
        <Setter Property="HeadersVisibility" Value="Column"/>
        <Setter Property="RowHeaderWidth" Value="0"/>
        <Setter Property="CanUserAddRows" Value="False"/>

        <!--virtualization-->
        <Setter Property="EnableColumnVirtualization" Value="True"/>
        <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
        <Setter Property="VirtualizingStackPanel.Virtualizationmode" Value="Recycling"/>

        <!--color on rows-->
        <Setter Property="AlternationCount" Value="2"/>
        <Setter Property="RowBackground" Value="{Dynamicresource datagridcellOddBackgroundBrush}"/>
        <Setter Property="AlternatingRowBackground" Value="{Dynamicresource datagridcellEvenBackgroundBrush}"/>

        <!--Can User ...-->
        <Setter Property="CanUserResizeColumns" Value="True"/>
        <Setter Property="CanUserResizeRows" Value="False"/>
        <Setter Property="CanUserReorderColumns" Value="False"/>
        <Setter Property="CanUserDeleteRows" Value="False"/>
        <Setter Property="CanUserAddRows" Value="False"/>
        <Setter Property="CanUserSortColumns" Value="True"/>

        <!--styles on parts-->
        <Setter Property="ColumnHeaderStyle" Value="{Dynamicresource DataGridColumnHeaderStyle}"/>
        <Setter Property="RowStyle" Value="{Dynamicresource DataGridRowStyle}"/>
        <Setter Property="CellStyle" Value="{Dynamicresource datagridcellStyle}"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGrid}">
                    <Border
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        Padding="{TemplateBinding Padding}"
                        snapsToDevicePixels="True">
                        <ScrollViewer
                            x:Name="DG_ScrollViewer"
                            Focusable="false"
                            Padding="0"
                            Background="{TemplateBinding RowBackground}"
                            Template="{Dynamicresource DataGridScrollViewerTemplate}">
                            <ItemsPresenter snapsToDevicePixels="{TemplateBinding snapsToDevicePixels}"/>
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsGrouping" Value="true">
                <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="datagridcellStyle" TargetType="{x:Type datagridcell}">
        <Setter Property="FontSize" Value="20"/>
        <Setter Property="Height" Value="72"/>
        <Setter Property="Padding" Value="16,4"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Focusable" Value="False"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type datagridcell}">
                    <Grid>
                        <Border
                            x:Name="BaseLay"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="0"
                            Background="{TemplateBinding Background}"
                            snapsToDevicePixels="True">
                            <ContentPresenter
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                Content="{TemplateBinding Content}"
                                ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                snapsToDevicePixels="{TemplateBinding snapsToDevicePixels}"
                                Margin="{TemplateBinding Padding}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="DataGridRowStyle" TargetType="{x:Type DataGridRow}">
        <Setter Property="snapsToDevicePixels" Value="true"/>
        <Setter Property="Validation.errortemplate" Value="{x:Null}"/>
        <Setter Property="Validationerrortemplate">
            <Setter.Value>
                <ControlTemplate>
                    <TextBlock Foreground="Red" Margin="2,0" Text="!" VerticalAlignment="Center"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridRow}">
                    <Grid>
                        <Border
                            x:Name="DGR_Border"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Background="{TemplateBinding Background}"
                            snapsToDevicePixels="True">
                            <SelectiveScrollingGrid>
                                <SelectiveScrollingGrid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </SelectiveScrollingGrid.ColumnDefinitions>
                                <SelectiveScrollingGrid.RowDefinitions>
                                    <RowDefinition Height="*"/>
                                    <RowDefinition Height="Auto"/>
                                </SelectiveScrollingGrid.RowDefinitions>
                                <Border x:Name="OverPressOverlay" Grid.RowSpan="2" Grid.ColumnSpan="2" Visibility="Hidden" Background="{Dynamicresource DataGridOverBackgroundBrush}"></Border>
                                <datagridcellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" snapsToDevicePixels="{TemplateBinding snapsToDevicePixels}"/>
                                <DataGridDetailsPresenter
                                    Grid.Column="1"
                                    Grid.Row="1"
                                    SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen,ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical},Converter={x:Static DataGrid.RowDetailsScrollingConverter},RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                                    Visibility="{TemplateBinding DetailsVisibility}"/>
                                <DataGridRowHeader
                                    Grid.RowSpan="2"
                                    SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
                                    Visibility="{Binding HeadersVisibility,ConverterParameter={x:Static DataGridHeadersVisibility.Row},Converter={x:Static DataGrid.HeadersVisibilityConverter},RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                            </SelectiveScrollingGrid>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="OverPressOverlay" Property="Visibility" Value="Visible"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsnewItem" Value="True">
                <Setter Property="Margin" Value="{Binding NewItemMargin,RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
            </Trigger>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="{Dynamicresource DataGridSelectBackgroundBrush}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="DataGridRowHeaderCellStyle" TargetType="datagridcell">
        ...
    </Style>

    <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
        ...
    </Style>
</ResourceDictionary>

还有我的使用代码。

<DataGrid Style="{StaticResource DataGridStyle}" Margin="8" ItemsSource="{Binding DataGridItems}" Height="400" Selectionmode="Single" SelectionUnit="FullRow">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="ID" SortMemberPath="Id">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Id}" Foreground="{StaticResource TextBrush}" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Left" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="data1" SortMemberPath="Data1">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Data1}" Foreground="{StaticResource TextBrush}" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Left" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="data2" SortMemberPath="Data2" Width="*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Data2}" Foreground="{StaticResource TextBrush}" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Left" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

谢谢

R.F。

Amanda_0 回答:在触摸设备上滚动/拖动时如何在DataGridRows的颜色上清除鼠标

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3140738.html

大家都在问