同一个窗口中不同的按钮控件使用同一个storyboard的方法(WPF)
2015-05-14 17:10
435 查看
在<storyboard>标签中,有一个target name需要指定,在使用中,如果是同一个窗体里的不同按钮(背景风格不同)需要使用同一个storyboard,那么就会遇到target name
指定的问题,下面的方法是自己在工作中遇到类似问题的解决方案,希望能有所帮助。
解决思路:新建按钮模板,动态传入背景图片,在模板中加入<storyboard>,传入的就是一个模板中泛指的元素名。
style如下:
<!--带有动画的按钮风格 背景图片的source通过按钮的dataContent传入-->
<Style x:Key="StoryBtn" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="border" BorderThickness=" 0" BorderBrush="Black">
<Grid x:Name="btngrid" Width="50" Height="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" MinWidth="16"/>
<ColumnDefinition Width="30" MinWidth="25"/>
</Grid.ColumnDefinitions>
<Image Name="IMG" Source="{Binding}" Width="16" Height="16" HorizontalAlignment="Left"/>
<TextBlock x:Name="TXT" Grid.Column="1" Text="{TemplateBinding Content}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<!--鼠标移入移出-->
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="18" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Width)"/>
<DoubleAnimation To="18" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Height)"/>
<DoubleAnimation To="13" Storyboard.TargetName="TXT" Storyboard.TargetProperty="(TextElement.FontSize)"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="16" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Width)"/>
<DoubleAnimation To="16" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Height)"/>
<DoubleAnimation To="12" Storyboard.TargetName="TXT" Storyboard.TargetProperty="(TextElement.FontSize)"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
<Setter Property="FontWeight" Value="Bold" TargetName="TXT"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="BorderThickness" Value="0.1" TargetName="border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
风格写好后,就是使用的问题了,使用方法如下:
<StackPanel Orientation="Horizontal">
<ToggleButton Content="全屏" Name="BtnFull" Foreground="#ff2c81cc" DataContext="images\full.png"
Style="{DynamicResource StoryBtn}" Margin="5"/>
<ToggleButton Content="四屏" Name="BtnFurth" Foreground="#ff2c81cc" DataContext="images\fourth.png"
Style="{DynamicResource StoryBtn}" Margin="10"/>
</StackPanel>
运行效果如下:
指定的问题,下面的方法是自己在工作中遇到类似问题的解决方案,希望能有所帮助。
解决思路:新建按钮模板,动态传入背景图片,在模板中加入<storyboard>,传入的就是一个模板中泛指的元素名。
style如下:
<!--带有动画的按钮风格 背景图片的source通过按钮的dataContent传入-->
<Style x:Key="StoryBtn" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="border" BorderThickness=" 0" BorderBrush="Black">
<Grid x:Name="btngrid" Width="50" Height="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" MinWidth="16"/>
<ColumnDefinition Width="30" MinWidth="25"/>
</Grid.ColumnDefinitions>
<Image Name="IMG" Source="{Binding}" Width="16" Height="16" HorizontalAlignment="Left"/>
<TextBlock x:Name="TXT" Grid.Column="1" Text="{TemplateBinding Content}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<!--鼠标移入移出-->
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="18" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Width)"/>
<DoubleAnimation To="18" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Height)"/>
<DoubleAnimation To="13" Storyboard.TargetName="TXT" Storyboard.TargetProperty="(TextElement.FontSize)"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="16" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Width)"/>
<DoubleAnimation To="16" Storyboard.TargetName="IMG" Storyboard.TargetProperty="(FrameworkElement.Height)"/>
<DoubleAnimation To="12" Storyboard.TargetName="TXT" Storyboard.TargetProperty="(TextElement.FontSize)"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
<Setter Property="FontWeight" Value="Bold" TargetName="TXT"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="BorderThickness" Value="0.1" TargetName="border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
风格写好后,就是使用的问题了,使用方法如下:
<StackPanel Orientation="Horizontal">
<ToggleButton Content="全屏" Name="BtnFull" Foreground="#ff2c81cc" DataContext="images\full.png"
Style="{DynamicResource StoryBtn}" Margin="5"/>
<ToggleButton Content="四屏" Name="BtnFurth" Foreground="#ff2c81cc" DataContext="images\fourth.png"
Style="{DynamicResource StoryBtn}" Margin="10"/>
</StackPanel>
运行效果如下:
相关文章推荐
- 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法
- 【Android 开发】:UI控件之单选按钮 RadioButton 的使用方法
- 【Android 开发】:UI控件之开关状态按钮 ToggleButton 的使用方法
- 使用WindowManager addView来显示一个窗口,响应返回按钮小技巧
- word2003页眉页脚中的“链接到前一个”按钮的作用及使用方法
- 使用Response.Redirect 两种方法打开一个新窗口
- ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
- WPF使用Page创建显示不同控件的程序
- android 让一个控件按钮居于底部的几种方法
- 分享一个很好用的 日期选择控件datepicker 使用方法分享
- 一个linux系统使用不同的内核的方法
- android 让一个控件按钮居于底部的几种方法
- WPF图表控件Chart FX使用方法汇总
- MFC-为子窗体/子窗口的静态控件的特定位置/区域 增加提示/tips信息 使用自绘方法
- swing点击按钮 打开一个浏览器窗口的方法
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- android 让一个控件按钮居于底部的几种方法
- ios 学习笔记(8) 控件 按钮(UIButton)的使用方法
- wpf 使用 storyboard 设置 控件 移动动画
- 同一个账号启动两个resin而要求使用不同jdk的解决方法