110,534
社区成员
发帖
与我相关
我的任务
分享
<Grid>
<Rectangle Name="Rectangle1" MouseEnter="ColorChangeMouseEvent" MouseLeave="ColorChangeMouseEvent" Margin="198,17,0,0" Height="88"
VerticalAlignment="Top" HorizontalAlignment="Left" Width="100">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="MouseStates">
<VisualState Name="BlueState">
<Storyboard>
<ColorAnimation To="Blue" Storyboard.TargetName="rectBrush" Storyboard.TargetProperty="Color"/>
</Storyboard>
</VisualState>
<VisualState Name="OrangeState">
<Storyboard>
<ColorAnimation To="Orange" Storyboard.TargetName="rectBrush" Storyboard.TargetProperty="Color"/>
</Storyboard>
</VisualState>
<VisualStateGroup.Transitions>
<VisualTransition To="BlueState" GeneratedDuration="0:0:2"/>
<VisualTransition To="OrangeState" GeneratedDuration="0:0:2">
</VisualTransition>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectBrush" Color="Orange"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
private void ColorChangeMouseEvent(object sender, MouseEventArgs e)
{
if (Rectangle1.IsMouseOver)
{
VisualStateManager.GoToElementState(Rectangle1, "BlueState", true);
}
else
{
VisualStateManager.GoToElementState(Rectangle1, "OrangeState", true);
}
}
<Grid>
<Rectangle Name="Rectangle1" MouseEnter="ColorChangeMouseEvent" MouseLeave="ColorChangeMouseEvent" Margin="198,17,0,0" Height="88"
VerticalAlignment="Top" HorizontalAlignment="Left" Width="100">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="MouseStates">
<VisualState Name="BlueState">
<Storyboard>
<ColorAnimation To="Blue" Storyboard.TargetName="rectBrush" Storyboard.TargetProperty="Color"/>
</Storyboard>
</VisualState>
<VisualState Name="OrangeState">
</VisualState>
<VisualStateGroup.Transitions>
<VisualTransition To="BlueState" GeneratedDuration="0:0:2"/>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectBrush" Color="Orange"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
private void ColorChangeMouseEvent(object sender, MouseEventArgs e)
{
if (Rectangle1.IsMouseOver)
{
VisualStateManager.GoToElementState(Rectangle1, "BlueState", true);
}
}
当鼠标移到矩形上后,2秒钟逐渐变色,但是鼠标移开之后,却没有变成橙色,没有出现你所说的“退出BlueState时候,它会回退到进入Storyboard之前的状态”,这是为什么?[/quote]
先解决你这个问题:
当控件进入由 VisualState.Name 属性指定的状态时, Storyboard 启动。当控件退出该状态时, Storyboard 停止。
所谓的退出该状态,必然是从一个状态转换到另一个状态,这里的状态指的是VisualState.你鼠标移开,只是你的鼠标的位置发生了改变,控件的VisualState并没有任何变动。当然不会有问题了。
是的,看msdn的说明:就是说退出BlueState时候,它会回退到进入Storyboard之前的状态,就是橙色。 退出BlueState是发生在调用 GoToElementState(橙色状态)时,与鼠标动作无关 When the control enters the state that is specified by the VisualState.Name property, the Storyboard begins. When the control exits the state, the Storyboard stops.
<Grid>
<Rectangle Name="Rectangle1" MouseEnter="ColorChangeMouseEvent" MouseLeave="ColorChangeMouseEvent" Margin="198,17,0,0" Height="88"
VerticalAlignment="Top" HorizontalAlignment="Left" Width="100">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="MouseStates">
<VisualState Name="BlueState">
<Storyboard>
<ColorAnimation To="Blue" Storyboard.TargetName="rectBrush" Storyboard.TargetProperty="Color"/>
</Storyboard>
</VisualState>
<VisualState Name="OrangeState">
</VisualState>
<VisualStateGroup.Transitions>
<VisualTransition To="BlueState" GeneratedDuration="0:0:2"/>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectBrush" Color="Orange"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
private void ColorChangeMouseEvent(object sender, MouseEventArgs e)
{
if (Rectangle1.IsMouseOver)
{
VisualStateManager.GoToElementState(Rectangle1, "BlueState", true);
}
}
当鼠标移到矩形上后,2秒钟逐渐变色,但是鼠标移开之后,却没有变成橙色,没有出现你所说的“退出BlueState时候,它会回退到进入Storyboard之前的状态”,这是为什么?鼠标移开始,BlueState失效,回到初始的颜色Orange(在rectangle.fill中指定的),2秒钟后,从orange再渐变到orange,所以看不出效果。 你应该把Storyboard写到VisualTransition中,因为原理上,各个VisualState应该是稳定的状态,而transition是在这些状态间的切换效果。