标签: visualstates

触发MouseOver状态后,为什么ColorAnimation for Checked状态不会保持颜色?

我遇到的问题与ControlTemplateToggleButton我创造.

当按钮为时Checked,ColorAnimation触发a并且控件的背景改变颜色.但是,如果用户进入MouseOver状态,则会触发另一个影响按钮背景的动画.

当鼠标不再处于该MouseOver状态时,控件不会返回到处于该Checked状态时应该处于的颜色.我不确定为什么在MouseOver触发状态时这种情况不会持续存在.

VisualStateManager我的部分ControlTemplate看起来有点儿像这样:

<VisualStateManger.VisualStateGroups>
    <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal"></VisualState>
        <VisualState x:Name="MouseOver">
            <Storyboard>
                <ColorAnimation Storyboard.TargetName="BackgroundBorder"
                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                    To="Gold" Duration="0:0:0.3" />
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="CheckedStates">
        <VisualState x:Name="Checked">
            <Storyboard>
                <ColorAnimation Storyboard.TargetName="BackgroundBorder"
                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                    To="PaleGoldenrod" Duration="0:0:0.3" />
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Run Code Online (Sandbox Code Playgroud)

wpf controltemplate togglebutton visualstates

5
推荐指数
1
解决办法
726
查看次数

按钮 VisualState Focused 不起作用

我试图在单击按钮时更改按钮的字体颜色。我尝试了很多不同的东西,但没有一个奏效。这是我尝试过的最新方法,我认为应该是答案,但它不起作用。有人可以帮忙吗?PointerOver 工作正常,但在单击按钮时 Focused 不执行任何操作。

<Style x:Key="ButtonStyle" TargetType="Button">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Foreground" Value="Black" />
    <Setter Property="FontWeight" Value="Normal" />
    <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"/>

                            <VisualState x:Name="PointerOver">
                                <VisualState.Setters>
                                    <Setter Target="ContentPresenter.FontWeight" Value="Bold" />
                                </VisualState.Setters>
                            </VisualState>

                            <VisualState x:Name="Pressed"/>

                            <VisualState x:Name="Focused">
                                <VisualState.Setters>
                                    <Setter Target="ContentPresenter.Foreground" Value="Purple" />
                                </VisualState.Setters>
                            </VisualState>

                            <VisualState x:Name="Disabled">
                            </VisualState>
                        </VisualStateGroup>

                    </VisualStateManager.VisualStateGroups>
                    <ContentPresenter
                        x:Name="ContentPresenter"
                        Content="{TemplateBinding Content}"
                        ContentTransitions="{TemplateBinding ContentTransitions}"
                        ContentTemplate="{TemplateBinding ContentTemplate}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

根据评论进行编辑:添加说明 - 我在发布此问题之前尝试使用 Pressed,但它没有做我想要的。单击后,我希望颜色保持应用直到单击另一个按钮,然后单击的新按钮中的文本将更改颜色,单击的上一个按钮将恢复为默认颜色。按下后,只要您松开鼠标按钮,文本就会恢复为默认值。

基于编辑的答案建议:还提供周围代码以查看是否在其他地方犯了错误。

    <Page.Resources>
    <Style x:Key="ButtonStyle" …
Run Code Online (Sandbox Code Playgroud)

xaml button visualstates uwp uwp-xaml

5
推荐指数
1
解决办法
1354
查看次数

我可以使用视觉状态更改对象的Canvas.Zindex吗?

如何使用视觉状态更改对象的Canvas.Zindex?我本以期能够做到这样的事情......

            <VisualState x:Name="MyVisualState">
                <VisualState.Setters>
                    <Setter Target="MyObject.Visibility" Value="Visible" />
                    <Setter Target="MyObject.Background" Value="Transparent" />
                    <Setter Target="MyObject.Canvas.ZIndex" Value="12" />
                </VisualState.Setters>
            </VisualState>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我还没有找到任何关于如何做到这一点的例子.有人可以帮忙吗?

xaml visualstates uwp uwp-xaml

3
推荐指数
1
解决办法
89
查看次数

如何通过ViewModel更改VisualState

我知道这个问题类似于很多.无论如何,我不明白.

我有几个VisualStates(超过2个,这就是为什么DataStateBehavior不是我的解决方案).我有ViewModel,它具有枚举属性CurrentState.每个枚举值代表一个状态,也可能是几个枚举值代表一个状态,不符合.我希望在CurrentState发生变化时改变VisualState(想一想,我的脑海中立即出现了:Binding是为这种情况创建的!)

我可以将CurrentState与视图VisualState(仅限xaml解决方案)绑定,以获得上述行为吗?

如果是,我该怎么办?

如果不是,我应该如何在我的ViewModel中使用VisualStateManager.GoToState()方法?

c# wpf xaml visualstates

3
推荐指数
2
解决办法
3634
查看次数

彩色动画ContentPresenter

我无法在ContentPresenter(NormalTextDay)中创建动画或自定义颜色,此错误出现在我的XAML中:

'System.Windows.Media.Animation.ColorAnimation'动画对象不能用于动画属性'Foreground'它是因为不兼容的类型'System.Windows.Media.Brush

  <Style x:Key="CalendarDayButtonStyle" TargetType="{x:Type CalendarDayButton}">
    <Setter Property="MinWidth" Value="5"/>
    <Setter Property="MinHeight" Value="5"/>
    <Setter Property="FontSize" Value="10"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CalendarDayButton}">
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.1"/>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Pressed">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled">
                                <!--<Storyboard>
                                    <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HighlightBackground"/>
                                    <DoubleAnimation Duration="0" To=".35" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="NormalText"/>
                                </Storyboard>-->
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0"/>
                            </VisualStateGroup.Transitions>
                            <VisualState …
Run Code Online (Sandbox Code Playgroud)

wpf animation colors contentpresenter visualstates

2
推荐指数
1
解决办法
6448
查看次数

Windows Phone 8.1中带有VisualStates的DataTrigger

我正在尝试将旧的Window phone 7.5 Silverlight应用程序转换为新的WinRT Universal应用程序,我遇到了这些代码的问题:

<Style TargetType="Button">
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Active}" Value="True">
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

我使用DataTrigger根据绑定值设置控件的可见性.

在Windows Phone 8.1 winrt应用程序中,此功能已用完.我已经尝试使用VisualStates来实现相同的功能,但我无法弄明白.任何人都可以帮助我或指导我的好榜样.我被困在这里......

datatrigger visualstates winrt-xaml windows-phone-8.1

2
推荐指数
1
解决办法
2603
查看次数