WPF 4 动态覆盖图标(Dynamic Overlay Icon)

简介: 原文:WPF 4 动态覆盖图标(Dynamic Overlay Icon)     在《WPF 4 开发Windows 7 任务栏》一文中我们学习了任务栏的相关开发内容,同时也对覆盖图标(Overlay Icon)功能进行了一些介绍,其中覆盖图标是以静态方式呈现的。
原文: WPF 4 动态覆盖图标(Dynamic Overlay Icon)

     在《WPF 4 开发Windows 7 任务栏》一文中我们学习了任务栏的相关开发内容,同时也对覆盖图标(Overlay Icon)功能进行了一些介绍,其中覆盖图标是以静态方式呈现的。本篇将进一步制作覆盖图标的动态实例。

新建应用程序

在项目中添加应用程序图标资源(App.ico),通过Window 属性为应用程序设置图标。

Icon

Property

ChooseIcon

在XAML 页面添加一个“Show Overlay Icon” <Button>控件用于触发后面显示动态覆盖图标的点击事件。

XAML

<Grid>
    <Button x:Name="showBtn" Content="Show Overlay Icon" 
            Height="30" Width="120" Click="showBtn_Click"/>
</Grid>

设置图标模板

     为了使用方便我们通过Window Resource 设置一个图标数据模板(DataTemplate)。由一个绿色圆圈(Ellipse)和一个文本框(TextBlock)组成,文本框用于动态显示倒计时数字。

<Window.Resources>
    <DataTemplate x:Key="DynamicIcon">
        <Grid Width="20" Height="20">
            <Ellipse Fill="Green" Stroke="White" StrokeThickness="2"/>

            <TextBlock Text="{Binding}" TextAlignment="Center" Foreground="White"
                        FontWeight="Bold" Height="16" VerticalAlignment="Center" 
                        FontSize="12"/>
        </Grid>
    </DataTemplate>
</Window.Resources>

添加任务栏组件

在XAML 中添加TaskbarItemInfo 组件,支持覆盖图标显示。

<Window x:Class="Win7TaskbarDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="211" Width="363" 
        Icon="/Win7TaskbarDemo;component/Resources/App.ico">
    <Window.Resources>
        … …
</Window.Resources> <Window.TaskbarItemInfo> <TaskbarItemInfo /> </Window.TaskbarItemInfo> <Grid> <Button x:Name="showBtn" Content="Show Overlay Icon" Height="30" Width="120" Click="showBtn_Click"/> </Grid> </Window>

添加点击事件

最后为按键添加点击事件,如下代码:

private void showBtn_Click(object sender, RoutedEventArgs e)
{
    int iconWidth = 20;
    int iconHeight = 20;

    for (int i = 10; i > 0; i--)
    {
        RenderTargetBitmap bmp = new RenderTargetBitmap(iconWidth, iconHeight, 96, 96, PixelFormats.Default);
        ContentControl ctl = new ContentControl();

        ctl.ContentTemplate = ((DataTemplate)Resources["DynamicIcon"]);
        ctl.Content = i.ToString();
        ctl.Arrange(new Rect(0, 0, iconWidth, iconHeight));

        bmp.Render(ctl);
        TaskbarItemInfo.Overlay = (ImageSource)bmp;
        Thread.Sleep(1000);
    }
}

     上面代码中,主要思路是通过循环将i值显示在覆盖图标中,以达到倒计时的效果。RenderTargetBitmap 允许我们通过XAML创建视图并将其渲染成Bitmap,当然这个Bitmap 图片就是要为TaskbarItemInfo 设置的Overlay 属性。

     接下来通过ContentControl 为DynamicIcon 模板设置覆盖图标资源,并将i值Binding 到TextBlock 控件。最后通过Render 方法将ContentControl 渲染为Bitmap,并赋给TaskbarItemInfo 的Overlay 属性。

运行程序点击“Show Overlay Icon”按键后,覆盖图标便以倒计时10秒方式动态显示。

10    8    1

源代码下载

目录
相关文章
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
本文介绍了在C# WPF应用程序中引入外部iconfont图标时可能遇到的显示问题及其解决方法:1) 检查资源路径和引入格式是否正确,确保字体文件引用格式为“#xxxx”,并正确指向字体文件位置;2) 确保图标资源被包含在程序集中,通过设置字体文件的生成操作为Resource(资源)来实现。
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
|
3月前
|
存储 设计模式 开发框架
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列表展示和选择处理
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列表展示和选择处理
|
3月前
|
XML 开发框架 前端开发
在WPF应用中,结合阿里矢量图标库使用Geometry图标
在WPF应用中,结合阿里矢量图标库使用Geometry图标
|
C# 数据格式 XML
WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树) 一、WPF对象级(Window对象)资源的定义与查找 实例一: StaticR...
8401 0
|
移动开发 开发框架 网络协议
WPF+ASP.NET SignalR实现动态折线图
WPF+ASP.NET SignalR实现动态折线图
134 0
WPF常用UI库和图标库(MahApps、HandyControl、LiveCharts)
WPF有很多开源免费的UI库,本文主要介绍常见的MahApps、HandyControl两个UI库;在开发过程中经常会涉及到图表的开发,本文主要介绍LiveCharts开源图表库。
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
1062 0
WPF实现强大的动态公式计算
|
C#
WPF 动态更换样式文件
原文:WPF 动态更换样式文件   ApplySkinFromMenuItem("Style/BigImgStyle.xaml", "Style/FileListStyle.xaml");     //换肤        void ApplySkinFromMenuItem(string sou...
963 0
|
C#
【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例
原文:【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例       用Binding并通过Converter转换的时候,可能偶尔会遇到传参的问题,一般通过设置xaml中的BindingParameter属性来给Converter传递参数。
1963 0
|
C# 前端开发
WPF 用代码调用dynamic resource动态更改背景 - CSDN博客
原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: 如果在ResourceDictionary定义了很...
1864 0