Storyboard使用随笔
Sliverlight情景下使用
方法一、 使用VisualStateManager 技术,调用 GoToState()
XAML代码:
<Grid x:Name="LayoutRoot" Background="White">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="myButtonStates">
<VisualState x:Name="Normal"></VisualState>
<VisualState x:Name="Changed">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="myButton" Storyboard.TargetProperty="Width" To="400" Duration="00:00:01">
</DoubleAnimation>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Button Width="100" Height="30" Content="点击我,让我长大" Click="Button_Click" x:Name="myButton"/>
</Grid>
C#代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Windows.VisualStateManager.GoToState(this, "Changed", true);
}
方法二、将Storyboard放在页面 Resources
XAML代码:
<Grid x:Name="LayoutRoot" Background="White">
<Grid.Resources>
<Storyboard x:Name="myButtonChanged">
<DoubleAnimation Storyboard.TargetName="myButton" Storyboard.TargetProperty="Width" To="400" Duration="00:00:01">
</DoubleAnimation>
</Storyboard>
</Grid.Resources>
<Button Width="100" Height="30" Content="点击我,让我长大" Click="Button_Click" x:Name="myButton"/>
</Grid>
C#代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
Storyboard sb = LayoutRoot.Resources["myButtonChanged"] as Storyboard;
sb.Begin();
}
WPF情景下使用
方法一,事件触发器
<Grid>
<Button Width="100" Height="30" Content="点击我,让我长大" x:Name="myButton">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard >
<DoubleAnimation To="400" Storyboard.TargetName="myButton" Storyboard.TargetProperty="Width" Duration="00:00:05">
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
方法二,样式触发器
<Grid>
<Grid.Resources>
<Style x:Key="ButtonStyle">
<Style.Triggers>
<Trigger Property="Button.IsPressed" Value="True">
<!--Trigger.EnterActions当设置的属性改变到指定的值时,执行(此示例是IsPressed的值为True时)-->
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="400" Duration="00:00:02" Storyboard.TargetProperty="Width"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<!--Trigger.ExitActions当设置的属性还原时执行(此示例IsPressed的值回到False时)-->
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="100" Duration="00:00:02" Storyboard.TargetProperty="Width"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Button Width="100" Height="30" Content="按住鼠标,按钮宽度长大,松开,还原" x:Name="myButton" Style="{StaticResource ButtonStyle}">
</Button>
</Grid>
如果山不向我走来,我就向山走去!

分类:
WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
2008-12-10 泛型转DataTable方法[转帖]