[翻译]Silverlight 3中的tooltip

译者注:刚刚开始学习Silverlight,安装的是Silverlight3,没有找到相应的教程,只好看Silverlight2的教程,跟着Terrylee写的一步一步学Silverlight 2系列时,发现有些控件已经删除或者改变了。tooltip就是其中之一。在网上搜索的时候,看到了这篇文章介绍tooltip,看着不错,就翻译下。英语不好,大家不要见怪。

Tooltip in Silverlight 3

原文链接:Tooltip in Silverlight 3 – part 1
Tooltip in Silverlight 3 – part 2
在我们的附录中我们频繁地需要创建tool tips.Silverlight中存在的ToolTip类就是为了这些目的。我们可以更容易地创建这样的tool tips通过使用这个类。
<Button Content="Click me!" Width="100" Height="100">
    
<ToolTipService.ToolTip>
        
<ToolTip Width="100" Height="100">
            
<TextBlock Text="123"/>
        
</ToolTip>
    
</ToolTipService.ToolTip>
</Button>

如我们看到的这些代码非常简单。然而,这个tool tips我们看着还有些乏味了。

Ok。让我们看看它怎样能用更有趣的形式来定义那些tips的行为。在WPF我们也可以为对象ToolTip重新定义控件模板,本质上改变它的外表。
<Button Content="Click me!" Width="100" Height="100">
    
<ToolTipService.ToolTip>
        
<ToolTip Width="100" Height="100">
            
<ToolTip.Template>
                
<ControlTemplate TargetType="ToolTip">
                    
<Border CornerRadius="5" Background="Red">
                        
<ContentPresenter Margin="5" Content="{TemplateBinding Content}"/>
                    
</Border>
                
</ControlTemplate>
            
</ToolTip.Template>            
            
<TextBlock Text="123"/>
        
</ToolTip>
    
</ToolTipService.ToolTip>
</Button>

现在在我们的帮助下显得更漂亮了。

这很明确,每次定义ControlTemplate是不愉快的动作,因此我们将定义tool tips样式。
<Button Content="Click me!" Width="100" Height="100">
    
<ToolTipService.ToolTip>
        
<ToolTip Width="100" Height="100">
            
<ToolTip.Style>
                
<Style TargetType="ToolTip">
                    
<Setter Property="Template">
                        
<Setter.Value>
                            
<ControlTemplate TargetType="ToolTip">
                                
<Border CornerRadius="5" Background="Red">
                                    
<ContentPresenter Margin="5" Content="{TemplateBinding Content}"/>
                                
</Border>
                            
</ControlTemplate>                            
                        
</Setter.Value>
                    
</Setter>
                
</Style>
            
</ToolTip.Style>            
            
<TextBlock Text="123"/>
        
</ToolTip>
    
</ToolTipService.ToolTip>
</Button>

可以把样式放到resources中,以便可以重复使用。
<UserControl.Resources>    
    
<Style x:Key="TooltipStyle" TargetType="ToolTip">
        
<Setter Property="Template">
            
<Setter.Value>
                
<ControlTemplate TargetType="ToolTip">
                    
<Border CornerRadius="5" Background="Red">
                        
<ContentPresenter Margin="5" Content="{TemplateBinding Content}"/>
                    
</Border>
                
</ControlTemplate>                            
            
</Setter.Value>
        
</Setter>
    
</Style>
</UserControl.Resources>
 
<!-- --->
 

<Button Content="Click me!" Width="100" Height="100">
    
<ToolTipService.ToolTip>
        
<ToolTip Width="100" Height="100" Style="{StaticResource TooltipStyle}">
            
<TextBlock Text="123"/>
        
</ToolTip>
    
</ToolTipService.ToolTip>
</Button>

现在我们的tool tip外表上变得更亲切了。
然而,需要说的是,在样式上那样的移动不总是可能的,但是关于这些我们下次再讨论(译者注:下文是part2)。
最近我们讨论了如何能在Silverlight应用程序重新定义tool tip的外表。在那之后tool tip更有趣些。然而,显示的效果仍然糟透了:) 让我们使用添加动画来改变tool tip的展现。
然而,我希望立即警告的是使用动画需要使用trigger,不幸的的是trigger不可以在样式中设置。为了这个原因我们要拒绝使用样式。
因此,最简单的是我们可以在Opacity属性中定义animate。让我们这样做吧。
<Button Content="Click me!" Width="100" Height="100">
    
<ToolTipService.ToolTip>
        
<ToolTip Name="RootLayout" Width="100" Height="100" Style="{StaticResource TooltipStyle}">
            
<ToolTip.Triggers>
                
<EventTrigger>
                    
<BeginStoryboard>
                        
<Storyboard>
                            
<DoubleAnimation Storyboard.TargetName="RootLayout" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:00.2"/>
                        
</Storyboard>
                    
</BeginStoryboard>
                
</EventTrigger>
            
</ToolTip.Triggers>
            
<TextBlock Text="123"/>
        
</ToolTip>
    
</ToolTipService.ToolTip>
</Button>

从这个例子我们可以看到在动画过程中主元素的透明度的改变。然而类似动画和标准行为只有很少的不同。让我们添加更多的动态。我们将实现tool tip以钟摆的形式展现。
为了这些目的我们将需要添加两个转换-ScaleTransform和Render Transform。那之后能改变那些转换的参数和钟摆的模式行为。
<DoubleAnimation Storyboard.TargetName="ScaleMe" Storyboard.TargetProperty="ScaleX" From="0" To="1" Duration="0:0:00.1"/>
<DoubleAnimation Storyboard.TargetName="ScaleMe" Storyboard.TargetProperty="ScaleY" From="0" To="1" Duration="0:0:00.1"/>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="RotateMe" Storyboard.TargetProperty="Angle">
    
<DoubleAnimationUsingKeyFrames.KeyFrames>
        
<DoubleKeyFrameCollection>
            
<LinearDoubleKeyFrame KeyTime="0:00:00.1" Value="-15" />
            
<LinearDoubleKeyFrame KeyTime="0:00:00.2" Value="15" />
            
<LinearDoubleKeyFrame KeyTime="0:00:00.3" Value="-11" />
            
<LinearDoubleKeyFrame KeyTime="0:00:00.4" Value="11" />
            
<LinearDoubleKeyFrame KeyTime="0:00:00.5" Value="-3" />
            
<LinearDoubleKeyFrame KeyTime="0:00:00.6" Value="3" />
            
<LinearDoubleKeyFrame KeyTime="0:00:00.7" Value="0" />
        
</DoubleKeyFrameCollection>
    
</DoubleAnimationUsingKeyFrames.KeyFrames>
</DoubleAnimationUsingKeyFrames>

源代码:AnimatedTooltip.zip
posted on 2009-08-30 22:35  齐世昌  阅读(1240)  评论(0编辑  收藏  举报