zoukankan      html  css  js  c++  java
  • Silverlight的自定义tooltip提示工具条

    这种应用场景其实很多,比如游戏中装备/魔法的选择菜单,这里借用了"深蓝色右手"的一张图

     再比如聊天室中的文本颜色设置 

    虽然sl的ToolTipService.ToolTip属性可以设置任何对象,比如下面这样

    代码
    1 <Rectangle Fill="Red" Height="50" Width="50" ToolTipService.Placement="Top">
    2             <ToolTipService.ToolTip>
    3                 <StackPanel Orientation="Horizontal">
    4                     <Rectangle Fill="Green" Height="50" Width="50"></Rectangle>
    5                     <Rectangle Fill="Blue" Height="50" Width="50" Margin="1,0,0,0"></Rectangle>
    6                     <Rectangle Fill="Pink" Height="50" Width="50" Margin="1,0,0,0"></Rectangle>
    7                 </StackPanel>
    8             </ToolTipService.ToolTip>           
    9         </Rectangle>

     但是有一个问题,鼠标一旦离开对象,tooltip就消失了,没办法在tooltip工具栏上点选操作。 

    所以得换一种思路,可以借助VSM方便的实现,设置好tooltip工具条后,定义二个基本的状态:Enter ,Leave 即可,Enter状态中设置tooltip对应的对象显示,Leave状态中设置tooltip对象隐藏

    示例代码(Xaml):

    代码
    <UserControl
        
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d
    ="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        mc:Ignorable
    ="d"
        x:Class
    ="tooltipTest.MainPage"
        d:DesignWidth
    ="640" d:DesignHeight="480">

        
    <Grid x:Name="LayoutRoot">

            
    <!--视觉状态定义区-->
            
    <VisualStateManager.VisualStateGroups>
                
    <VisualStateGroup x:Name="CommStates">
                    
    <VisualState x:Name="Enter">
                        
    <Storyboard>
                            
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="itemsTip" Storyboard.TargetProperty="(UIElement.Visibility)">
                                
    <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                    
    <DiscreteObjectKeyFrame.Value>
                                        
    <Visibility>Visible</Visibility>
                                    
    </DiscreteObjectKeyFrame.Value>
                                
    </DiscreteObjectKeyFrame>
                            
    </ObjectAnimationUsingKeyFrames>
                        
    </Storyboard>
                    
    </VisualState>
                    
    <VisualState x:Name="Leave">
                        
    <Storyboard>
                            
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="itemsTip" Storyboard.TargetProperty="(UIElement.Visibility)">
                                
    <DiscreteObjectKeyFrame KeyTime="00:00:00.1">
                                    
    <DiscreteObjectKeyFrame.Value>
                                        
    <Visibility>Collapsed</Visibility>
                                    
    </DiscreteObjectKeyFrame.Value>
                                
    </DiscreteObjectKeyFrame>
                            
    </ObjectAnimationUsingKeyFrames>
                        
    </Storyboard>
                    
    </VisualState>
                
    </VisualStateGroup>
            
    </VisualStateManager.VisualStateGroups>


            
    <Canvas HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="cTip" Height="20" Width="20" Cursor="Hand" MouseLeave="GoToLeave" MouseEnter="GoToEnter">
                
    <Rectangle x:Name="rColor" Fill="Black" Width="20" Height="20" ToolTipService.ToolTip="选择颜色"/>

                
    <!--tip显示区-->
                
    <ItemsControl x:Name="itemsTip" Canvas.Top="-21" Canvas.Left="0" Visibility="Collapsed">
                    
    <ItemsControl.ItemsPanel>
                        
    <ItemsPanelTemplate>
                            
    <StackPanel Orientation="Horizontal"/>
                        
    </ItemsPanelTemplate>
                    
    </ItemsControl.ItemsPanel>
                    
    <ItemsControl.ItemTemplate>
                        
    <DataTemplate>
                            
    <Rectangle Fill="{Binding Color}" ToolTipService.ToolTip="{Binding Name}" Width="20" Height="20" Margin="0,0,1,0" MouseLeftButtonDown="ChangeColor"/>
                        
    </DataTemplate>
                    
    </ItemsControl.ItemTemplate>
                
    </ItemsControl>
            
    </Canvas>
            
        
    </Grid>
    </UserControl>

    后端代码:

    代码
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Shapes;

    namespace tooltipTest
    {
        
    public partial class MainPage : UserControl
        {
            List
    <FillColor> lstTipsData;

            
    public MainPage()
            {
                InitializeComponent();

                
    //初始化数据
                lstTipsData = new List<FillColor>() { 
                    
    new FillColor(){ Color = new SolidColorBrush(Colors.Red), Name="红色"},
                    
    new FillColor(){ Color = new SolidColorBrush(Colors.Blue), Name="蓝色"},
                    
    new FillColor(){ Color = new SolidColorBrush(Colors.Green),Name="绿色"},
                    
    new FillColor(){ Color = new SolidColorBrush(Colors.Magenta), Name="洋红"},
                    
    new FillColor(){ Color = new SolidColorBrush(Colors.Black), Name="黑色"},
                    
    new FillColor(){ Color = new SolidColorBrush(Colors.Orange), Name="橙色"},
                };


                
    this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }

            
    void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                itemsTip.ItemsSource 
    = lstTipsData; //数据绑定           
            }


            
    private void GoToEnter(object sender, MouseEventArgs e)
            {
                VisualStateManager.GoToState(
    this"Enter"false);
            }

            
    private void GoToLeave(object sender, MouseEventArgs e)
            {
                VisualStateManager.GoToState(
    this"Leave"false);
            }

            
    /// <summary>
            
    /// 点击后更换颜色
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void ChangeColor(object sender, MouseButtonEventArgs e)
            {
                rColor.Fill 
    = (sender as Rectangle).Fill;
                VisualStateManager.GoToState(
    this"Leave"false);
            }
        }

        
    /// <summary>
        
    /// 测试实体类
        
    /// </summary>
        public class FillColor
        {
            
    public SolidColorBrush Color { setget; }
            
    public string Name { setget; }
        }

    }


     

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    BZOJ3052:[WC2013]糖果公园
    浅谈莫队
    BZOJ2120:数颜色(莫队版)
    BZOJ3809:Gty的二逼妹子序列
    BZOJ3289:Mato的文件管理
    BZOJ2038:[2009国家集训队]小Z的袜子
    浅谈分块
    Django框架之 Cookie与Session组件
    Django框架之 forms组件
    Django框架之 自定义分页器组件
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1622697.html
Copyright © 2011-2022 走看看