C# Note18: about dialog(關於對話方塊)

來源:互聯網
上載者:User

標籤:copyright   trie   gray   key   static   code   方式   box   blog   

前言

基本上任何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資料。 

  

C# Note18: about dialog(關於對話方塊)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.