VisualState.Setters中的Setter的属性属性会生成语法错误

时间:2018-06-22 23:34:02

标签: xaml uwp win-universal-app uwp-xaml

我想为UWP按钮创建自定义样式。因此,我从MSDN复制了button style template,然后修改了"PointerOver"可视状态以确保我掌握了要旨。

以下是我到目前为止的摘要。它在一个名为CustomButtonStyleTemplate.xaml的单独文件中,在我的主要xaml文件中,我是使用<ResourceDictionary.MergedDictionaries/>导入的。

<Style TargetType="Button" x:Key="SpecialButton">
    ...
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid x:Name="ButtonGrid" Background="{TemplateBinding Background}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal">
                                <Storyboard>
                                    <PointerUpThemeAnimation Storyboard.TargetName="ButtonGrid" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="PointerOver">
                                <VisualState.Setters>
                                    <Setter Property="ButtonGrid.Opacity" Value="0.5"/>
                                </VisualState.Setters>
                            </VisualState>
                            .
                            .
                            .

很不幸,我的自定义<Setter/>产生以下错误:The XAML Binary Format (XBF) generator reported syntax error

每当我在网上寻找相似的代码时,大多数人都会将Property的{​​{1}}字段设置为类似<Setter/>的位置,其中某些MyButton.Opacity元素具有{{1} }。

问题是,我希望这种样式适用于很多我将明确选择的按钮,因此为什么我为{{1 }}。

我认为,由于<Button/>具有x:Name="MyButton",因此我应该使用x:Key="SpecialButton",但显然我弄错了。我应该注意,<Style/>也不起作用。

那我该如何通用地指称该样式应用于哪个按钮的<Grid/>属性?

1 个答案:

答案 0 :(得分:1)

Property="ButtonGrid.Opacity"替换为Target="ButtonGrid.Opacity"

赞:

<Setter Target="ButtonGrid.Opacity" Value="0.5"/>