zoukankan      html  css  js  c++  java
  • [翻译]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
  • 相关阅读:
    二进制文件分析工具-hexdump使用指南
    麦克风阵列技术-beaforming开源算法源码分析
    CMake的作用和价值--概念简介
    matlab load函数用法 实例
    SparkSQL(3.1.1)源码分析
    Spark SQL: Relational Data Processing in Spark (SIGMOD’15)
    论文解析 -- QuickSel: Quick Selectivity Learning with Mixture Models (SIGMOD’20)
    Is Query Optimization a “Solved” Problem? (2014, Guy Lohman)
    Adaptive Statistics in Oracle 12c(PVLDB 2017)
    论文解析 -- A Survey on Advancing the DBMS Query Optimizer: Cardinality Estimation, Cost Model, and Plan Enumeration (Data Science and Engineering 2021)
  • 原文地址:https://www.cnblogs.com/qishichang/p/1556911.html
Copyright © 2011-2022 走看看