C# UWP Gridviewitem悬停边框未成形

C# UWP Gridviewitem悬停边框未成形,c#,xaml,uwp,C#,Xaml,Uwp,我有一个简单的GridView,它的项目有角半径。 项目的显示很好,但是当鼠标悬停时,没有应用角半径,看起来也不好 在上述示例中,项目B2。 我希望在悬停时保持显示效果 这是我的代码: <Page.Resources> <DataTemplate x:Key="PersonDataTemplate" x:DataType="local:Person"> <Border Widt

我有一个简单的GridView,它的项目有角半径。
项目的显示很好,但是当鼠标悬停时,没有应用角半径,看起来也不好

在上述示例中,项目B2。 我希望在悬停时保持显示效果

这是我的代码:

<Page.Resources>
    <DataTemplate x:Key="PersonDataTemplate" x:DataType="local:Person">
        <Border
            Width="200"
            Height="50"
            Background="AliceBlue"
            BorderBrush="#D0D0D0"
            BorderThickness="1"
            CornerRadius="90">
            <TextBlock
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Text="{x:Bind FullName}" />
        </Border>
    </DataTemplate>


</Page.Resources>

<Grid Padding="64">

    <GridView ItemTemplate="{StaticResource PersonDataTemplate}" ItemsSource="{x:Bind Persons, Mode=OneWay}" />
</Grid>


如何实现这一点?

这是因为
GridViewItem
的悬停边框是在其
样式中定义的!
通过设置DataTemplate,您只需设置GridViewItem的内容,而无需修改控件本身的显示样式

您需要创建一个新样式,该样式继承自GridViewItem的默认样式,并从中自定义悬停边框和显示“内容”的“框”的所有属性

问候

UWP Gridviewitem悬停边框未成形

上面屏幕截图中矩形的指针是
GridViewItem
ListViewItemPresenter
样式。如果要删除它们,可以自定义
GridViewItem
样式,并将相关部分设置为
Transparent
。您可以直接使用以下样式

<Style x:Key="GridViewItemRevealStyle" TargetType="GridViewItem">
            <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
            <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
            <Setter Property="Background" Value="{ThemeResource GridViewItemBackground}" />
            <Setter Property="Foreground" Value="{ThemeResource GridViewItemForeground}" />
            <Setter Property="TabNavigation" Value="Local" />
            <Setter Property="IsHoldingEnabled" Value="True" />
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
            <Setter Property="Margin" Value="0,0,4,4" />
            <Setter Property="MinWidth" Value="{ThemeResource GridViewItemMinWidth}" />
            <Setter Property="MinHeight" Value="{ThemeResource GridViewItemMinHeight}" />
            <Setter Property="AllowDrop" Value="False" />
            <Setter Property="UseSystemFocusVisuals" Value="{StaticResource UseSystemFocusVisuals}" />
            <Setter Property="FocusVisualMargin" Value="-2" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="GridViewItem">
                        <ListViewItemPresenter
                            x:Name="Root"
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                            CheckBoxBrush="{ThemeResource GridViewItemCheckBoxBrush}"
                            CheckBrush="{ThemeResource GridViewItemCheckBrush}"
                            CheckMode="{ThemeResource GridViewItemCheckMode}"
                            ContentMargin="{TemplateBinding Padding}"
                            ContentTransitions="{TemplateBinding ContentTransitions}"
                            Control.IsTemplateFocusTarget="True"
                            DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
                            DragBackground="{ThemeResource GridViewItemDragBackground}"
                            DragForeground="{ThemeResource GridViewItemDragForeground}"
                            DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}"
                            FocusBorderBrush="{ThemeResource GridViewItemFocusBorderBrush}"
                            FocusSecondaryBorderBrush="{ThemeResource GridViewItemFocusSecondaryBorderBrush}"
                            FocusVisualMargin="{TemplateBinding FocusVisualMargin}"
                            PlaceholderBackground="{ThemeResource GridViewItemPlaceholderBackground}"
                            PointerOverBackground="Transparent"
                            PointerOverForeground="{ThemeResource GridViewItemForegroundPointerOver}"
                            PressedBackground="{ThemeResource GridViewItemBackgroundPressed}"
                            ReorderHintOffset="{ThemeResource GridViewItemReorderHintThemeOffset}"
                            RevealBackground="{ThemeResource GridViewItemRevealBackground}"
                            RevealBorderBrush="{ThemeResource GridViewItemRevealBorderBrush}"
                            RevealBorderThickness="{ThemeResource GridViewItemRevealBorderThemeThickness}"
                            SelectedBackground="Transparent"
                            SelectedForeground="{ThemeResource GridViewItemForegroundSelected}"
                            SelectedPointerOverBackground="Transparent"
                            SelectedPressedBackground="{ThemeResource GridViewItemBackgroundSelectedPressed}"
                            SelectionCheckMarkVisualEnabled="{ThemeResource GridViewItemSelectionCheckMarkVisualEnabled}"
                            >
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal" />
                                    <VisualState x:Name="Selected" />
                                    <VisualState x:Name="PointerOver">
                                        <VisualState.Setters>
                                            <Setter Target="Root.(RevealBrush.State)" Value="PointerOver" />
                                        </VisualState.Setters>
                                    </VisualState>
                                    <VisualState x:Name="PointerOverSelected">
                                        <VisualState.Setters>
                                            <Setter Target="Root.(RevealBrush.State)" Value="PointerOver" />
                                        </VisualState.Setters>
                                    </VisualState>
                                    <VisualState x:Name="PointerOverPressed">
                                        <VisualState.Setters>
                                            <Setter Target="Root.(RevealBrush.State)" Value="Pressed" />
                                        </VisualState.Setters>
                                    </VisualState>
                                    <VisualState x:Name="Pressed">
                                        <VisualState.Setters>
                                            <Setter Target="Root.(RevealBrush.State)" Value="Pressed" />
                                        </VisualState.Setters>
                                    </VisualState>
                                    <VisualState x:Name="PressedSelected">
                                        <VisualState.Setters>
                                            <Setter Target="Root.(RevealBrush.State)" Value="Pressed" />
                                        </VisualState.Setters>
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="DisabledStates">
                                    <VisualState x:Name="Enabled" />
                                    <VisualState x:Name="Disabled">
                                        <VisualState.Setters>
                                            <Setter Target="Root.RevealBorderThickness" Value="0" />
                                        </VisualState.Setters>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                        </ListViewItemPresenter>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
<Style
            x:Key="GridViewItemContainerStyle1"
            BasedOn="{StaticResource GridViewItemRevealStyle}"
            TargetType="GridViewItem"
            />

用法

<Grid Padding="64">
    <GridView
        IsTabStop="False"
        ItemContainerStyle="{StaticResource GridViewItemContainerStyle1}"
        ItemTemplate="{StaticResource PersonDataTemplate}"
        />
</Grid>


这是我第一次尝试,但我不想失去悬停效果。我希望它是shapedI恐怕这是不可能的,因为项目“box”的呈现样式被包装在样式内的“ListViewItemPresenter”控件中,因此我们不能修改,例如,“box”本身的角半径。是的,Luca Lindholm是正确的,如果您确实想要选定的边框,我们建议您为
DataTemplate
添加,当项目指针指向设置
BorderThickness=1
其他设置
BorderThickness=0
显然这是我第一次尝试,但我无法使悬停成形