c# - UWP 删除 Gridview 中的焦点边框

标签 c# xaml gridview uwp uwp-xaml

我对通用 Windows 平台 (UWP) 和 XAML 还很陌生。

我有一个显示垂直堆叠数据的 GridView。这很好用,但是当我按住 GridView.ItemTemplate/DataTemplate 之一时,我得到一个灰色边框:

Pressing and holding a DataTemplate

我曾尝试将这些属性应用于各种项目但没有成功:

FocusVisualPrimaryThickness="0" 
FocusVisualSecondaryThickness="0" 
FocusVisualPrimaryBrush="Black" 
FocusVisualSecondaryBrush="Black" 
FocusVisualMargin="0"

我在这些属性上也注意到了这一点。这是否意味着它尚未实现?:

TBD

这是我的代码:

<GridView x:Name="IconGridView"
                  Canvas.ZIndex="2"
                  Grid.Row="0"
                  Margin="398,728,402,107"
                  ItemClick="Clicked_On_Video_Preview_Image"
                  IsItemClickEnabled="True"
                  IsSwipeEnabled="True"
                  ItemsSource="{x:Bind _videoItems}"
                  ScrollViewer.HorizontalScrollBarVisibility="Auto"
                  ScrollViewer.HorizontalScrollMode="Enabled"
                  ScrollViewer.VerticalScrollMode="Disabled"
                  BorderThickness="0"  
                  SelectionMode="None"
                  BorderBrush="Black"
                  Background="Black" IsHoldingEnabled="False">

            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid Orientation="Vertical" Background="Black" />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>

            <GridView.ItemTemplate>
                <DataTemplate x:DataType="model:VideoItem">
                    <StackPanel Margin="30,0,30,0" HorizontalAlignment="Center" BorderThickness="0" BorderBrush="Black" Background="Black" Height="245">
                        <Grid>
                            <Border Name="PreviewBorder" BorderThickness="2" BorderBrush="#000000" Margin="0,55,0,55">
                                <Image Height="135" Width="240" Source="{x:Bind ThumbnailFilename}" Loaded="Video_Preview_Loaded" Stretch="UniformToFill" />
                            </Border>
                            <Image Margin="0,55,0,55" Height="29" Width="29" Source="Assets/play_vit.png" />
                            <TextBlock Margin="0,185,0,0" Text="{x:Bind Title}" CharacterSpacing="200" TextWrapping="WrapWholeWords" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="12" Foreground="white" Width="240" Height="45"/>
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>

最佳答案

灰色边框是 GridViewItem 的一部分模板。如果您想修改它,您需要创建自己的模板。

您可以通过右键单击设计器中的控件,单击编辑样式,然后编辑副本轻松地做到这一点,这将为您提供默认样式和可根据您自己的需要修改的模板。

在我的例子中,我根本不想修改模板,只是想摆脱它,所以我只是用 ContentPresenter 替换了模板。只显示我自己的内容,像这样:

<Style TargetType="GridViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GridViewItem">
                <ContentPresenter ContentTransitions="{TemplateBinding ContentTransitions}"
                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                  Margin="{TemplateBinding Padding}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果您想知道所有这些 TemplateBinding 在哪里绑定(bind)来自,我只是从默认样式复制它们。我本可以写 <ContentPresenter />但我更喜欢这样做。

希望这能回答您的问题!

关于c# - UWP 删除 Gridview 中的焦点边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263514/

相关文章:

c# - MiniProfiler - 在控制台应用程序中复制 Web View 信息

c# - 如何为 WPF 中的字段制作自定义转换器?

带有类别的Android GridView?

c# - 由于多个依赖项中的相同属性类型导致编译错误

c# - 扩展 TFS 以在工作项中包含自定义字段

wpf - DatePicker子类找不到模板

android - 可以按列而不是按行填充 'grid-like' View 吗?

android - 在没有第三方库的情况下将图像从网络加载到网格

C#:嵌套条件与 continue 语句

.net - 如何将程序集 BAML 转换为 XAML?