WinRT XAML按钮样式,无悬停或单击状态

WinRT XAML按钮样式,无悬停或单击状态,xaml,windows-runtime,winrt-xaml,Xaml,Windows Runtime,Winrt Xaml,我很好奇,防止XAML按钮出现翻转和点击状态的最简单方法是什么 据我所知,我可以选择的选项有: 使用VisualStateManager 以编程方式防止交互 在WPF中,我可以使用ControlTemplate.Trigger,但WinRT不公开此元素。当然,遵循MVVM模式,我希望在纯XAML中实现这一点 这是我的按钮: <Button Style="{StaticResource FooBarIcon}" /> 以及相应的风格: <Style x:Key="

我很好奇,防止XAML按钮出现翻转和点击状态的最简单方法是什么

据我所知,我可以选择的选项有:

  • 使用VisualStateManager
  • 以编程方式防止交互
  • 在WPF中,我可以使用ControlTemplate.Trigger,但WinRT不公开此元素。当然,遵循MVVM模式,我希望在纯XAML中实现这一点

    这是我的按钮:

     <Button Style="{StaticResource FooBarIcon}" />
    
    
    
    以及相应的风格:

        <Style x:Key="AppIconStepThreeButtonStyle" TargetType="ButtonBase" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ButtonBase">
                    <Button Background="Transparent">
                        <Button.Content>
                            <Image Margin="0"  Width="40" Source="../Assets/buttonIcon.png" />
                        </Button.Content>
                    </Button>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
    
    
    如果点击或滚动此代码,背景将变为白色。我希望在不定义VisualState的情况下保持透明

    这可能吗?我希望一个属性或设置可以在一行代码中实现这一点

    另外,我想我可以模拟一个按钮,但使用一个带有ImageBrush填充的矩形,但本着保持语义正确的精神,我最好将它保留为xaml按钮元素

    谢谢

    您可以检查WinRT XAML Toolkit中的控件是否适合您。当前,您的模板完全错误,因为您正在用另一个使用默认模板的
    按钮替换它。通过右键单击“设计”视图中的按钮(在Blend或VS中,或在“文档大纲”面板中),可以提取默认模板。这是默认模板:

    <ControlTemplate
        TargetType="Button">
        <Grid>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup
                    x:Name="CommonStates">
                    <VisualState
                        x:Name="Normal" />
                    <VisualState
                        x:Name="PointerOver">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPointerOverForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Pressed">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPressedBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPressedForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Disabled">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="BorderBrush"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledBorderThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
                <VisualStateGroup
                    x:Name="FocusStates">
                    <VisualState
                        x:Name="Focused">
                        <Storyboard>
                            <DoubleAnimation
                                Duration="0"
                                To="1"
                                Storyboard.TargetProperty="Opacity"
                                Storyboard.TargetName="FocusVisualWhite" />
                            <DoubleAnimation
                                Duration="0"
                                To="1"
                                Storyboard.TargetProperty="Opacity"
                                Storyboard.TargetName="FocusVisualBlack" />
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Unfocused" />
                    <VisualState
                        x:Name="PointerFocused" />
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Border
                x:Name="Border"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                Background="{TemplateBinding Background}"
                Margin="3">
                <ContentPresenter
                    x:Name="ContentPresenter"
                    AutomationProperties.AccessibilityView="Raw"
                    ContentTemplate="{TemplateBinding ContentTemplate}"
                    ContentTransitions="{TemplateBinding ContentTransitions}"
                    Content="{TemplateBinding Content}"
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
            </Border>
            <Rectangle
                x:Name="FocusVisualWhite"
                IsHitTestVisible="False"
                Opacity="0"
                StrokeDashOffset="1.5"
                StrokeEndLineCap="Square"
                Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
                StrokeDashArray="1,1" />
            <Rectangle
                x:Name="FocusVisualBlack"
                IsHitTestVisible="False"
                Opacity="0"
                StrokeDashOffset="0.5"
                StrokeEndLineCap="Square"
                Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
                StrokeDashArray="1,1" />
        </Grid>
    </ControlTemplate>
    
    
    
    您可以从VSM中的“PointerOver”和“Pressed”状态中删除
    序列图像板
    ,您应该可以获得所需的效果。

    您可以检查WinRT XAML Toolkit中的控件是否适合您。当前,您的模板完全错误,因为您正在用另一个使用默认模板的
    按钮替换它。通过右键单击“设计”视图中的按钮(在Blend或VS中,或在“文档大纲”面板中),可以提取默认模板。这是默认模板:

    <ControlTemplate
        TargetType="Button">
        <Grid>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup
                    x:Name="CommonStates">
                    <VisualState
                        x:Name="Normal" />
                    <VisualState
                        x:Name="PointerOver">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPointerOverForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Pressed">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPressedBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPressedForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Disabled">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="BorderBrush"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledBorderThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
                <VisualStateGroup
                    x:Name="FocusStates">
                    <VisualState
                        x:Name="Focused">
                        <Storyboard>
                            <DoubleAnimation
                                Duration="0"
                                To="1"
                                Storyboard.TargetProperty="Opacity"
                                Storyboard.TargetName="FocusVisualWhite" />
                            <DoubleAnimation
                                Duration="0"
                                To="1"
                                Storyboard.TargetProperty="Opacity"
                                Storyboard.TargetName="FocusVisualBlack" />
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Unfocused" />
                    <VisualState
                        x:Name="PointerFocused" />
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Border
                x:Name="Border"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                Background="{TemplateBinding Background}"
                Margin="3">
                <ContentPresenter
                    x:Name="ContentPresenter"
                    AutomationProperties.AccessibilityView="Raw"
                    ContentTemplate="{TemplateBinding ContentTemplate}"
                    ContentTransitions="{TemplateBinding ContentTransitions}"
                    Content="{TemplateBinding Content}"
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
            </Border>
            <Rectangle
                x:Name="FocusVisualWhite"
                IsHitTestVisible="False"
                Opacity="0"
                StrokeDashOffset="1.5"
                StrokeEndLineCap="Square"
                Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
                StrokeDashArray="1,1" />
            <Rectangle
                x:Name="FocusVisualBlack"
                IsHitTestVisible="False"
                Opacity="0"
                StrokeDashOffset="0.5"
                StrokeEndLineCap="Square"
                Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
                StrokeDashArray="1,1" />
        </Grid>
    </ControlTemplate>
    
    
    
    您可以从VSM中的“PointerOver”和“Pressed”状态中删除
    序列图像板
    ,您应该可以获得所需的效果。

    您可以检查WinRT XAML Toolkit中的控件是否适合您。当前,您的模板完全错误,因为您正在用另一个使用默认模板的
    按钮替换它。通过右键单击“设计”视图中的按钮(在Blend或VS中,或在“文档大纲”面板中),可以提取默认模板。这是默认模板:

    <ControlTemplate
        TargetType="Button">
        <Grid>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup
                    x:Name="CommonStates">
                    <VisualState
                        x:Name="Normal" />
                    <VisualState
                        x:Name="PointerOver">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPointerOverForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Pressed">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPressedBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonPressedForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Disabled">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Background"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="BorderBrush"
                                Storyboard.TargetName="Border">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledBorderThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetProperty="Foreground"
                                Storyboard.TargetName="ContentPresenter">
                                <DiscreteObjectKeyFrame
                                    KeyTime="0"
                                    Value="{ThemeResource ButtonDisabledForegroundThemeBrush}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
                <VisualStateGroup
                    x:Name="FocusStates">
                    <VisualState
                        x:Name="Focused">
                        <Storyboard>
                            <DoubleAnimation
                                Duration="0"
                                To="1"
                                Storyboard.TargetProperty="Opacity"
                                Storyboard.TargetName="FocusVisualWhite" />
                            <DoubleAnimation
                                Duration="0"
                                To="1"
                                Storyboard.TargetProperty="Opacity"
                                Storyboard.TargetName="FocusVisualBlack" />
                        </Storyboard>
                    </VisualState>
                    <VisualState
                        x:Name="Unfocused" />
                    <VisualState
                        x:Name="PointerFocused" />
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Border
                x:Name="Border"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                Background="{TemplateBinding Background}"
                Margin="3">
                <ContentPresenter
                    x:Name="ContentPresenter"
                    AutomationProperties.AccessibilityView="Raw"
                    ContentTemplate="{TemplateBinding ContentTemplate}"
                    ContentTransitions="{TemplateBinding ContentTransitions}"
                    Content="{TemplateBinding Content}"
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
            </Border>
            <Rectangle
                x:Name="FocusVisualWhite"
                IsHitTestVisible="False"
                Opacity="0"
                StrokeDashOffset="1.5"
                StrokeEndLineCap="Square"
                Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
                StrokeDashArray="1,1" />
            <Rectangle
                x:Name="FocusVisualBlack"
                IsHitTestVisible="False"
                Opacity="0"
                StrokeDashOffset="0.5"
                StrokeEndLineCap="Square"
                Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
                StrokeDashArray="1,1" />
        </Grid>
    </ControlTemplate>
    
    
    
    <