zoukankan      html  css  js  c++  java
  • WPF—QQ界面(二):QQ状态切换效果的实现

    状态切换效果的分析:

    1,当鼠标左键单击图表,会弹出一个包含各种状态的下拉菜单;

    2,每个下拉菜单的选项卡都由一个状态图标和一段对状态描述的文字组成;

    3,左键单击任何一个选项卡,都能将该选项卡对应的状态图标替换到最上面的初始状态。

    为了实现这种效果,我去了解了几个可能能做出类似效果的控件,包括comboBox,treeView等,最后发现还是Menu最能令我满意。

    先贴代码:

    前台xaml设计器代码:

    <Menu Grid.Column="1"  Width="25" Height="25" Background="Transparent" Margin="2,0,-0.5,0">
                    <MenuItem  Foreground="Green">
                        <MenuItem.Icon >
                            <Image Source="emotion/online2.png" Name="InitialPic"/>
                        </MenuItem.Icon>
                        <MenuItem Click="Online_Click" >
                            <MenuItem.Header>
                                <TextBlock Text="我在线上"/>
                            </MenuItem.Header>
                            <MenuItem.Icon>
                                <Image  Source="emotion/online2.png" />
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Click="Smile_face_Click">
                            <MenuItem.Header>
                                <TextBlock Text="Q我吧"/>
                            </MenuItem.Header>
                            <MenuItem.Icon>
                                <Image Source="emotion/smile_face2.png" />
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Click="away_Click">
                            <MenuItem.Header>
                                <TextBlock Text="离开"/>
                            </MenuItem.Header>
                            <MenuItem.Icon>
                                <Image Source="emotion/away2.png" />
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Click="busy_Click">
                            <MenuItem.Header>
                                <TextBlock Text="忙碌"/>
                            </MenuItem.Header>
                            <MenuItem.Icon>
                                <Image Source="emotion/busy2.png" />
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Click="not_disturb_Click">
                            <MenuItem.Header>
                                <TextBlock Text="请勿打扰"/>
                            </MenuItem.Header>
                            <MenuItem.Icon>
                                <Image Source="emotion/not_disturb2.png" />
                            </MenuItem.Icon>
                        </MenuItem >
                        <MenuItem Click="offline_Click">
                            <MenuItem.Header>
                                <TextBlock Text="离线"/>
                            </MenuItem.Header>
                            <MenuItem.Icon>
                                <Image Source="emotion/offline2.png" />
                            </MenuItem.Icon>
                        </MenuItem>
                    </MenuItem>
                </Menu>

    后台click事件处理的代码:

    private void Online_Click(object sender, RoutedEventArgs e)
            {
                InitialPic.Source = new BitmapImage(new Uri("emotion/online2.png", UriKind.Relative));
            }
    
            private void Smile_face_Click(object sender, RoutedEventArgs e)
            {
                InitialPic.Source = new BitmapImage(new Uri("emotion/smile_face2.png", UriKind.Relative));
            }
    
            private void away_Click(object sender, RoutedEventArgs e)
            {
                InitialPic.Source = new BitmapImage(new Uri("emotion/away2.png", UriKind.Relative));
            }
    
            private void busy_Click(object sender, RoutedEventArgs e)
            {
                InitialPic.Source = new BitmapImage(new Uri("emotion/busy2.png", UriKind.Relative));
            }
    
            private void not_disturb_Click(object sender, RoutedEventArgs e)
            {
                InitialPic.Source = new BitmapImage(new Uri("emotion/not_disturb2.png", UriKind.Relative));
            }
    
            private void offline_Click(object sender, RoutedEventArgs e)
            {
                InitialPic.Source = new BitmapImage(new Uri("emotion/offline2.png", UriKind.Relative));
            }

    选择Menu的理由:

    因为一个Menu可以有多个MenuItem,一个MenuItem就对应于下拉菜单中的一个选项卡,

    而MenuItem中的 Icon 和 Header 就对应于选项卡中的状态图标和文字描述两部分,非常符合我的想法。

    接着再给每个MenuItem添加Click事件,

    每个click事件就是用URI(统一资源标识)的相对路径将 “初始化状态图标的图片源” 替换成 “被单击的选项卡的状态图标的图片源”,“初始化状态图标的图片源” 我一直设置成“在线”状态。

    最终效果如下:

  • 相关阅读:
    JAVA后端方面,如何快速达到能实习的程度
    如何高效地把Spring boot学到能干活的程度
    零高并发项目经验的人如何通过面试得到实践机会?
    Java学到什么程度可以面试工作?
    Java培训班学员如何找工作?如何过试用期?
    作为Java技术面试官,我如何深挖候选人的技能
    今年我拿到了期望中的收入,同时更希望能在睡后收入上有进一步的发展——2021年我的总结与思考
    程序员月薪一万到底难不难?
    自学java,如何快速地找到工作
    搞IT的应届生如何写好简历?
  • 原文地址:https://www.cnblogs.com/danieldong/p/5121306.html
Copyright © 2011-2022 走看看