Xamarin.Forms-禁用按钮动画UWP

时间:2018-06-21 11:07:20

标签: c# xamarin.forms uwp

我正在编写Xamarin Forms应用程序,并且在其他内容上有一个透明按钮,因此都可以单击。但是,当我将鼠标悬停在按钮上或在UWP中单击它时,会得到一些灰色动画。

问题已在此处描述:Diasble button animation or effects xamarin-forms

但是没有适合我的解决方案。

1 个答案:

答案 0 :(得分:1)

UWP的问题在于,所有控件都将遵循UWP框架随附的样式。

在这种情况下,我们讨论的是Button样式,实际的实现可以在这里https://msdn.microsoft.com/en-us/library/windows/apps/mt299109.aspx

中找到

因此,如果要禁用按钮的某些功能,则需要提供自己的UWP样式。

最简单的方法是将XAML样式代码从网站复制/粘贴到Xamarin表单解决方案的UWP项目中的App.Xaml中。 之后,看到您的请求,只需删除<VisualState x:Name="PointerOver"><VisualState x:Name="Pressed">区域。 这样,OnHover或OnPressed上就不会有任何动画。

所以最终样式将是:

   <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualState x:Name="Normal">
                                            <Storyboard>
                                                <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Disabled">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid"
                                                   Storyboard.TargetProperty="Background">
                                                    <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                   Storyboard.TargetProperty="Foreground">
                                                    <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                   Storyboard.TargetProperty="BorderBrush">
                                                    <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <ContentPresenter x:Name="ContentPresenter"
                          BorderBrush="{TemplateBinding BorderBrush}"
                          BorderThickness="{TemplateBinding BorderThickness}"
                          Content="{TemplateBinding Content}"
                          ContentTransitions="{TemplateBinding ContentTransitions}"
                          ContentTemplate="{TemplateBinding ContentTemplate}"
                          Padding="{TemplateBinding Padding}"
                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                          AutomationProperties.AccessibilityView="Raw"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </Application.Resources>