我遇到的问题与ControlTemplate为ToggleButton我创造.
当按钮为时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) 我试图在单击按钮时更改按钮的字体颜色。我尝试了很多不同的东西,但没有一个奏效。这是我尝试过的最新方法,我认为应该是答案,但它不起作用。有人可以帮忙吗?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) 如何使用视觉状态更改对象的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)
但这不起作用.我还没有找到任何关于如何做到这一点的例子.有人可以帮忙吗?
我知道这个问题类似于很多.无论如何,我不明白.
我有几个VisualStates(超过2个,这就是为什么DataStateBehavior不是我的解决方案).我有ViewModel,它具有枚举属性CurrentState.每个枚举值代表一个状态,也可能是几个枚举值代表一个状态,不符合.我希望在CurrentState发生变化时改变VisualState(想一想,我的脑海中立即出现了:Binding是为这种情况创建的!)
我可以将CurrentState与视图VisualState(仅限xaml解决方案)绑定,以获得上述行为吗?
如果是,我该怎么办?
如果不是,我应该如何在我的ViewModel中使用VisualStateManager.GoToState()方法?
我无法在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) 我正在尝试将旧的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来实现相同的功能,但我无法弄明白.任何人都可以帮助我或指导我的好榜样.我被困在这里......
visualstates ×6
wpf ×3
xaml ×3
uwp ×2
uwp-xaml ×2
animation ×1
button ×1
c# ×1
colors ×1
datatrigger ×1
togglebutton ×1
winrt-xaml ×1