xaml - "TemplateBinding' 之后使用的 '{' 必须是标记扩展“UWP GridView 上的错误

标签 xaml uwp win-universal-app windows-10-universal uwp-xaml

我的 MainPage.xaml 上有一个 GridView。我想要更改GenerateItemContainerStyle中最外层边框画笔颜色:

Screenshot

因此,我通过单击 GridView/Additional Templates/GenerateItemContainerStyle 中的“编辑副本”创建了一个新的自定义样式。

然后,这个XAML样式出现在我的App.xaml中。

<Style x:Key="GridViewItemStyle1" 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="True"/>
    <Setter Property="FocusVisualMargin" Value="-2"/>
    <Setter Property="FocusVisualPrimaryBrush" Value="{ThemeResource GridViewItemFocusVisualPrimaryBrush}"/>
    <Setter Property="FocusVisualPrimaryThickness" Value="2"/>
    <Setter Property="FocusVisualSecondaryBrush" Value="{ThemeResource GridViewItemFocusVisualSecondaryBrush}"/>
    <Setter Property="FocusVisualSecondaryThickness" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GridViewItem">
                <ListViewItemPresenter CheckBrush="{ThemeResource GridViewItemCheckBrush}" ContentMargin="{TemplateBinding Padding}" CheckMode="{ThemeResource GridViewItemCheckMode}" ContentTransitions="{TemplateBinding ContentTransitions}" CheckBoxBrush="{ThemeResource GridViewItemCheckBoxBrush}" DragForeground="{ThemeResource GridViewItemDragForeground}" DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" DragBackground="{ThemeResource GridViewItemDragBackground}" DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}" FocusVisualPrimaryBrush="{TemplateBinding FocusVisualPrimaryBrush}" FocusVisualSecondaryThickness="{TemplateBinding FocusVisualSecondaryThickness}" FocusBorderBrush="{ThemeResource GridViewItemFocusBorderBrush}" FocusVisualMargin="{TemplateBinding FocusVisualMargin}" FocusVisualPrimaryThickness="{TemplateBinding FocusVisualPrimaryThickness}" FocusSecondaryBorderBrush="{ThemeResource GridViewItemFocusSecondaryBorderBrush}" FocusVisualSecondaryBrush="{TemplateBinding FocusVisualSecondaryBrush}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Control.IsTemplateFocusTarget="True" PointerOverForeground="{ThemeResource GridViewItemForegroundPointerOver}" PressedBackground="{ThemeResource GridViewItemBackgroundPressed}" PlaceholderBackground="{ThemeResource GridViewItemPlaceholderBackground}" PointerOverBackground="{ThemeResource GridViewItemBackgroundPointerOver}" ReorderHintOffset="{ThemeResource GridViewItemReorderHintThemeOffset}" SelectedPressedBackground="{ThemeResource GridViewItemBackgroundSelectedPressed}" SelectionCheckMarkVisualEnabled="{ThemeResource GridViewItemSelectionCheckMarkVisualEnabled}" SelectedForeground="{ThemeResource GridViewItemForegroundSelected}" SelectedPointerOverBackground="{ThemeResource GridViewItemBackgroundSelectedPointerOver}" SelectedBackground="{ThemeResource GridViewItemBackgroundSelected}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

之后,我尝试部署我的应用程序,出现此错误:

Type 'TemplateBinding' used after '{' must be a Markup Extension. Error code 0x09c4.** in ListViewItemPresenter section of XAML code.

我该如何解决这个问题?

谢谢。

最佳答案

FocusVisual* 属性仅存在于周年纪念更新中。您需要将项目属性中的最低 SDK 版本设置为“Windows 10 周年纪念版”(通常为内部版本 14393)。

您是在谈论每个 GridViewItem 具有的 2px 边框吗?这不是焦点边界;而是焦点边界。您必须覆盖这些资源:

<GridView>
    <GridView.Resources>
        <!--
            These will apply to this GridView only. Put in higher scope
            (page or app) depending on what you want it to affect.
        -->
        <SolidColorBrush x:Key="GridViewItemBackgroundSelected" Color="Red"/>
        <SolidColorBrush x:Key="GridViewItemBackgroundSelectedPointerOver" Color="Blue"/>
        <SolidColorBrush x:Key="GridViewItemBackgroundSelectedPressed" Color="LimeGreen"/>
        <SolidColorBrush x:Key="GridViewItemBackgroundPointerOver" Color="Magenta"/>
        <SolidColorBrush x:Key="GridViewItemBackgroundPressed" Color="Violet"/>
    </GridView.Resources>
</GridView>

关于xaml - "TemplateBinding' 之后使用的 '{' 必须是标记扩展“UWP GridView 上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397909/

相关文章:

c# - 无法使用 MVVM 在 WPF 中填写 ListBox

wpf - 调用 XamlReader.Load 时抛出 XamlParseException

c# - UWP MediaCapture-录制WAV音频,采样率16000,16位,单声道

c# - 有谁知道我在哪里可以找到通用 Windows 专用网络(客户端和服务器)代码示例?

visual-studio - Visual Studio 专业版 2015 : Error DEP6100

windows-phone-8.1 - WP8.1 文件选择器中的内置图像裁剪工具

UWP 页面生命周期

wpf - XamlReader - 将多个 CLR 命名空间映射到单个 XML 命名空间

wpf - 内容更改时 DataGridView 样式不更新

c# - UWP Composition - 将不透明蒙版应用于 ListView 的顶部 30px