前言

基本上任何software或application都会在help菜单中,有着一个关于对话框,介绍产品的版权、版本等信息,还有就是对第三方的引用(add author credits)。

首先,看下常用软件的关于对话框:

言归正传,进入正题,介绍下我在进行这部分开发时的三种方法:

由于用到了很多需要credit的icons,几种方法主要的区别便在于如何显示这些icons,并加上作者信息。

(1)使用ListView显示,并制作DataTemplate模板

MainWindow.xaml

<Window x:Class="AboutApplicationTest.MainWindow"
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"
xmlns:local="clr-namespace:AboutApplicationTest"
mc:Ignorable="d"
Title="XXXXX Application" Height="460" Width="580" Icon="/images/about.png">
<Window.Resources>
<DataTemplate x:Key="MyTemplate" DataType="{x:Type local:IconInfo}">
<Label Height="30" Width="500">
<Label.Content>
<DockPanel>
<Image Source="{Binding Icon}" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="{Binding Url}" Name="linkHelp" ToolTip="Author Credits" Click="linkHelp_Click_1">
<Hyperlink.Inlines>
<Run Text="{Binding Author}"/>
</Hyperlink.Inlines>
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
</DataTemplate>
</Window.Resources>
<Grid Background="LightGray">
<Grid Margin="0,0,0,0" VerticalAlignment="Top" Width="580" Height="440" HorizontalAlignment="Left" Background="LightGray">
<Image Source="/Images/user.png" Width="60" Height="60" HorizontalAlignment="Left" Margin="50,10,0,0" VerticalAlignment="Top"/>
<Label Content="XXXXX Application" FontWeight="Bold" FontSize="16" HorizontalAlignment="Left" Margin="160,10,0,0" VerticalAlignment="Top"></Label>
<Label Content="Copyright © 2017 by XXXXXX Corporation. All Rights Reserved." HorizontalAlignment="Left" Margin="160,40,0,0" VerticalAlignment="Top"></Label>
<GroupBox BorderBrush="DarkGreen" Header="Product Information:" HorizontalAlignment="Left" Height="60" Margin="50,80,0,0" VerticalAlignment="Top" Width="460">
<Label Name="pbc_version" Content="" HorizontalAlignment="Left" Margin="135,5,0,0" VerticalAlignment="Top"/>
</GroupBox> <Label Content="Included third parties:" HorizontalAlignment="Left" Margin="10,150,0,0" VerticalAlignment="Top"></Label>
<ListView x:Name="lvIconInfo" ItemTemplate="{StaticResource MyTemplate}" Height="180" Width="545" Margin="10,175,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label Name="WarningInfo" Content="Warning:" HorizontalAlignment="Left" Margin="5,360,0,0" VerticalAlignment="Top" Width="555"></Label>
</Grid>
</Grid>
</Window>

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace AboutApplicationTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ObservableCollection<IconInfo> iconInfoList;
public MainWindow()
{
this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; InitializeComponent(); WarningInfo.Content += " This computer program is protected by copyright law and international treaties. Unauthoized"
+ "\n" + "reproduction or distribution of this program, or any portion of it, may result in severe civil and criminal"
+ "\n" + "penalties, and will be prosecuted to the maximum extent possible under the law."; pbc_version.Content = "Version: " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); //利用反射的方式获取assembly的version信息 iconInfoList = new ObservableCollection<IconInfo>(); iconInfoList.Add(new IconInfo("/Images/user.png", "https://www.flaticon.com/authors/chanut-is-industries", "Chanut is Industries"));
iconInfoList.Add(new IconInfo("/Images/password.png", "https://www.flaticon.com/authors/freepik", "Freepik"));
iconInfoList.Add(new IconInfo("/Images/user.png", "https://www.flaticon.com/authors/chanut-is-industries", "Chanut is Industries"));
iconInfoList.Add(new IconInfo("/Images/password.png", "https://www.flaticon.com/authors/freepik", "Freepik"));
iconInfoList.Add(new IconInfo("/Images/user.png", "https://www.flaticon.com/authors/chanut-is-industries", "Chanut is Industries"));
iconInfoList.Add(new IconInfo("/Images/password.png", "https://www.flaticon.com/authors/freepik", "Freepik"));
iconInfoList.Add(new IconInfo("/Images/user.png", "https://www.flaticon.com/authors/chanut-is-industries", "Chanut is Industries"));
iconInfoList.Add(new IconInfo("/Images/password.png", "https://www.flaticon.com/authors/freepik", "Freepik")); this.lvIconInfo.ItemsSource = iconInfoList;
} private void linkHelp_Click_1(object sender, RoutedEventArgs e)
{
//Hyperlink link = sender as Hyperlink;
//Process.Start(new ProcessStartInfo(link.NavigateUri.AbsoluteUri));
if (sender.GetType() != typeof(Hyperlink))
return;
string link = ((Hyperlink)sender).NavigateUri.ToString();
Process.Start(link);
}
} public class IconInfo
{
private string icon;
private string url;
private string author; public IconInfo(string icon, string url, string author)
{
this.icon = icon;
this.url = url;
this.author = author;
} public string Icon
{
get
{
return this.icon;
}
set
{
this.icon = value;
}
} public string Url
{
get
{
return this.url;
}
set
{
this.url = value;
}
} public string Author
{
get
{
return this.author;
}
set
{
this.author = value;
}
}
}
}

运行效果图:

(2)使用StackPanel包裹Label控件,然后外加滚动条

部分代码:  

<Grid Background="LightGray">
<Grid Margin="0,0,0,0" VerticalAlignment="Top" Width="580" Height="440" HorizontalAlignment="Left" Background="LightGray">
<Image Source="/Images/pbc_icon.png" Width="120" Height="50" HorizontalAlignment="Left" Margin="30,10,0,0" VerticalAlignment="Top"/>
<Label Content="XXXXX Application" FontWeight="Bold" FontSize="16" HorizontalAlignment="Left" Margin="160,10,0,0" VerticalAlignment="Top"></Label>
<Label Content="Copyright © 2017 by XXXXXX Corporation. All Rights Reserved." HorizontalAlignment="Left" Margin="160,40,0,0" VerticalAlignment="Top"></Label>
<GroupBox BorderBrush="DarkGreen" Header="Product Information:" HorizontalAlignment="Left" Height="60" Margin="50,80,0,0" VerticalAlignment="Top" Width="460">
<Label Name="XXX_version" Content="" HorizontalAlignment="Left" Margin="135,5,0,0" VerticalAlignment="Top"/>
</GroupBox> <Label Content="Included third parties:" HorizontalAlignment="Left" Margin="10,150,0,0" VerticalAlignment="Top"></Label>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Height="180" Margin="10,175,0,0" HorizontalAlignment="Left" VerticalAlignment="Top">
<StackPanel Background="White" Width="535">
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/user.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/chanut-is-industries" Name="linkHelp" Click="linkHelp_Click">Chanut is Industries
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/password.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/freepik" Name="linkHelp1" Click="linkHelp_Click">Freepik
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/verifyPassword.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/freepik" Name="linkHelp2" Click="linkHelp_Click">Freepik
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/description.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/Picol" Name="linkHelp3" Click="linkHelp_Click">Picol
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/role.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/Vectors-Market" Name="linkHelp4" Click="linkHelp_Click">Vectors Market
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/error.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/Pixel-Buddha" Name="linkHelp5" Click="linkHelp_Click">Pixel Buddha
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
<Label Height="30" Width="535">
<Label.Content>
<DockPanel>
<Image Source="/Images/alarm.png" DockPanel.Dock="Left" Width="20" Height="20"/>
<TextBlock Text=" Icon made by " DockPanel.Dock="Left" Margin="10,0,0,0"/>
<TextBlock DockPanel.Dock="Left">
<Hyperlink NavigateUri="https://www.flaticon.com/authors/freepik" Name="linkHelp6" Click="linkHelp_Click">Freepik
</Hyperlink>
</TextBlock>
<TextBlock Text="from www.flaticon.com" DockPanel.Dock="Left" Margin="5,0,0,0"/>
</DockPanel>
</Label.Content>
</Label>
</StackPanel>
</ScrollViewer>
<Label Name="WarningInfo" Content="Warning:" HorizontalAlignment="Left" Margin="5,360,0,0" VerticalAlignment="Top" Width="555"></Label>
</Grid>
</Grid>

(3)在第一种方法的基础上,不用hardcode的方式,而是增加一个xml配置文件,从中读取icons的credit数据。 

  

附:Example using Hyperlink in WPF

C# Note18: 使用wpf制作about dialog(关于对话框)的更多相关文章

  1. Android中制作自定义dialog对话框的实例

    http://www.jb51.net/article/83319.htm   这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...

  2. WPF制作的小型笔记本

    WPF制作的小型笔记本-仿有道云笔记 楼主所在的公司不允许下载外部资源, 不允许私自安装应用程序, 平时记录东西都是用记事本,时间久了很难找到以前记的东西. 平时在家都用有道笔记, 因此就模仿着做了一 ...

  3. WPF制作表示透明区域的马赛克画刷

    最近在用WPF制作一款软件,需要像ps一样表示透明区域,于是制作了一个马赛克背景的style.实现比较简单,那么过程和思路就不表了,直接上代码 <DrawingBrush TileMode=&q ...

  4. WPF制作的小时钟

    原文:WPF制作的小时钟 周末无事, 看到WEB QQ上的小时钟挺可爱的, 于是寻思着用WPF模仿着做一个. 先看下WEB QQ的图: 打开VS, 开始动工. 建立好项目后, 面对一个空荡荡的页面, ...

  5. WPF制作Logo,很爽,今后在应用程序中加入Logo轻松,省事!

    原文:WPF制作Logo,很爽,今后在应用程序中加入Logo轻松,省事! 这是效果: XAML代码:<Viewbox Width="723.955078" Height=&q ...

  6. WPF制作的党旗

    原文:WPF制作的党旗 --------------------------------------------------------------------------------引用或转载时请保 ...

  7. WPF 制作 Windows 屏保

    分享如何使用WPF 制作 Windows 屏保 WPF 制作 Windows 屏保 作者:驚鏵 原文链接:https://github.com/yanjinhuagood/ScreenSaver 框架 ...

  8. WPF中使用文件浏览对话框的几种方式

    原文:WPF中使用文件浏览对话框的几种方式 WPF本身并没有为我们提供文件浏览的控件, 也不能直接使用Forms中的控件,而文件浏览对话框又是我们最常用的控件之一. 下面是我实现的方式 方式1: 使用 ...

  9. WPF编程,C#中对话框自动关闭的一种方法。

    原文:WPF编程,C#中对话框自动关闭的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8 ...

随机推荐

  1. Linux 大爆炸:一个内核,无数发行版

    即使你是一个 Linux 新人,你可能也已经知道它不是一个单一的.整体的操作系统,而是一群项目.这个星座中不同的“星”组成了“发行版”.每个都提供了自己的 Linux 模式. 感谢这一系列发行版所提供 ...

  2. [python] A*算法基于栅格地图的全局路径规划

    # 所有节点的g值并没有初始化为无穷大 # 当两个子节点的f值一样时,程序选择最先搜索到的一个作为父节点加入closed # 对相同数值的不同对待,导致不同版本的A*算法找到等长的不同路径 # 最后c ...

  3. [HEOI2016/TJOI2016]字符串

    嘟嘟嘟 今天复习一下SAM. lcp固然不好做,干脆直接翻过来变成后缀.首先答案一定满足单调性,所以我们二分lcp的长度\(mid\),然后判断\(s[d \ldots d + mid - 1]\)是 ...

  4. 测试 Flask 应用

    测试 Flask 应用 没有经过测试的东西都是不完整的 这一箴言的起源已经不可考了,尽管他不是完全正确的,但是仍然离真理不远.没有测试过的应用将会使得提高现有代码质量很困难,二不测试应用程序的开发者, ...

  5. ActiveMQ后台使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/nangeali/article/details/81514517默认地址 http://192.16 ...

  6. binarySearch(int[] a,int fromIndex,int toIndex, int key)的用法

    package com.Summer_0420.cn; import java.util.Arrays; /** * @author Summer * binarySearch(int[] a,int ...

  7. Python实现分发数据块到多台服务器上

    代码如下: # coding: utf-8 import paramiko import re import os from time import sleep # 定义一个类,表示一台远端linux ...

  8. FAT32文件系统学习(3) —— 数据区(DATA区)

    FAT32文件系统学习(3) —— 数据区(DATA区) 今天继续学习FAT32文件系统的数据区部分(Data区).其实这一篇应该是最有意思的,我们可以通过在U盘内放入一些文件,然后在程序中读取出来: ...

  9. FineUIMvc随笔(2)怎样在控件中嵌套 HTML

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 有网友在<FineUI总群1>问这么一个问题:怎么把 HTML 嵌套在控件中? 这是很多刚学习 FineU ...

  10. Spring+SpringMVC+Mybatis框架整合流程

    一:基本步骤 新建Maven项目,导入相关依赖.(推荐) ————–Mybatis配置 —————- 新建entity包,并根据数据库(表)新建相关实体类. 新建dao包,并根据业务创建必要的mapp ...