整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          WPF 按鈕添加 UAC 盾牌圖標

          WPF 按鈕添加 UAC 盾牌圖標

          本文經原作者授權以原創方式二次分享,歡迎轉載、分享。

          WPF 按鈕添加 UAC 盾牌圖標

          作者: zhaotianff - 趙嘉

          原文鏈接[1]:https://www.cnblogs.com/zhaotianff/p/17662237.html

          上一篇[2]文章中,介紹了如何獲取系統Shell的圖標。在C#中調用SHGetStockIconInfo即可獲取獲取圖標

          1)定義SHGetStockIconInfo函數用到的數據結構

          public enum SHSTOCKICONID : uint
          {
          /// <summary>Document of a type with no associated application.</summary>
          SIID_DOCNOASSOC = 0,
          /// <summary>Document of a type with an associated application.</summary>
          SIID_DOCASSOC = 1,
          /// <summary>Generic application with no custom icon.</summary>
          SIID_APPLICATION = 2,
          /// <summary>Folder (generic, unspecified state).</summary>
          SIID_FOLDER = 3,
          /// <summary>Folder (open).</summary>
          SIID_FOLDEROPEN = 4,
          /// <summary>5.25-inch disk drive.</summary>
          SIID_DRIVE525 = 5,
          /// <summary>3.5-inch disk drive.</summary>
          SIID_DRIVE35 = 6,
          /// <summary>Removable drive.</summary>
          SIID_DRIVEREMOVE = 7,
          /// <summary>Fixed drive (hard disk).</summary>
          SIID_DRIVEFIXED = 8,
          /// <summary>Network drive (connected).</summary>
          SIID_DRIVENET = 9,
          /// <summary>Network drive (disconnected).</summary>
          SIID_DRIVENETDISABLED = 10,
          /// <summary>CD drive.</summary>
          SIID_DRIVECD = 11,
          /// <summary>RAM disk drive.</summary>
          SIID_DRIVERAM = 12,
          /// <summary>The entire network.</summary>
          SIID_WORLD = 13,
          /// <summary>A computer on the network.</summary>
          SIID_SERVER = 15,
          /// <summary>A local printer or print destination.</summary>
          SIID_PRINTER = 16,
          /// <summary>The Network virtual folder (FOLDERID_NetworkFolder/CSIDL_NETWORK).</summary>
          SIID_MYNETWORK = 17,
          /// <summary>The Search feature.</summary>
          SIID_FIND = 22,
          /// <summary>The Help and Support feature.</summary>
          SIID_HELP = 23,
          /// <summary>Overlay for a shared item.</summary>
          SIID_SHARE = 28,
          /// <summary>Overlay for a shortcut.</summary>
          SIID_LINK = 29,
          /// <summary>Overlay for items that are expected to be slow to access.</summary>
          SIID_SLOWFILE = 30,
          /// <summary>The Recycle Bin (empty).</summary>
          SIID_RECYCLER = 31,
          /// <summary>The Recycle Bin (not empty).</summary>
          SIID_RECYCLERFULL = 32,
          /// <summary>Audio CD media.</summary>
          SIID_MEDIACDAUDIO = 40,
          /// <summary>Security lock.</summary>
          SIID_LOCK = 47,
          /// <summary>A virtual folder that contains the results of a search.</summary>
          SIID_AUTOLIST = 49,
          /// <summary>A network printer.</summary>
          SIID_PRINTERNET = 50,
          /// <summary>A server shared on a network.</summary>
          SIID_SERVERSHARE = 51,
          /// <summary>A local fax printer.</summary>
          SIID_PRINTERFAX = 52,
          /// <summary>A network fax printer.</summary>
          SIID_PRINTERFAXNET = 53,
          /// <summary>A file that receives the output of a Print to file operation.</summary>
          SIID_PRINTERFILE = 54,
          /// <summary>A category that results from a Stack by command to organize the contents of a folder.</summary>
          SIID_STACK = 55,
          /// <summary>Super Video CD (SVCD) media.</summary>
          SIID_MEDIASVCD = 56,
          /// <summary>A folder that contains only subfolders as child items.</summary>
          SIID_STUFFEDFOLDER = 57,
          /// <summary>Unknown drive type.</summary>
          SIID_DRIVEUNKNOWN = 58,
          /// <summary>DVD drive.</summary>
          SIID_DRIVEDVD = 59,
          /// <summary>DVD media.</summary>
          SIID_MEDIADVD = 60,
          /// <summary>DVD-RAM media.</summary>
          SIID_MEDIADVDRAM = 61,
          /// <summary>DVD-RW media.</summary>
          SIID_MEDIADVDRW = 62,
          /// <summary>DVD-R media.</summary>
          SIID_MEDIADVDR = 63,
          /// <summary>DVD-ROM media.</summary>
          SIID_MEDIADVDROM = 64,
          /// <summary>CD+ (enhanced audio CD) media.</summary>
          SIID_MEDIACDAUDIOPLUS = 65,
          /// <summary>CD-RW media.</summary>
          SIID_MEDIACDRW = 66,
          /// <summary>CD-R media.</summary>
          SIID_MEDIACDR = 67,
          /// <summary>A writable CD in the process of being burned.</summary>
          SIID_MEDIACDBURN = 68,
          /// <summary>Blank writable CD media.</summary>
          SIID_MEDIABLANKCD = 69,
          /// <summary>CD-ROM media.</summary>
          SIID_MEDIACDROM = 70,
          /// <summary>An audio file.</summary>
          SIID_AUDIOFILES = 71,
          /// <summary>An image file.</summary>
          SIID_IMAGEFILES = 72,
          /// <summary>A video file.</summary>
          SIID_VIDEOFILES = 73,
          /// <summary>A mixed file.</summary>
          SIID_MIXEDFILES = 74,
          /// <summary>Folder back.</summary>
          SIID_FOLDERBACK = 75,
          /// <summary>Folder front.</summary>
          SIID_FOLDERFRONT = 76,
          /// <summary>Security shield. Use for UAC prompts only.</summary>
          SIID_SHIELD = 77,
          /// <summary>Warning.</summary>
          SIID_WARNING = 78,
          /// <summary>Informational.</summary>
          SIID_INFO = 79,
          /// <summary>Error.</summary>
          SIID_ERROR = 80,
          /// <summary>Key.</summary>
          SIID_KEY = 81,
          /// <summary>Software.</summary>
          SIID_SOFTWARE = 82,
          /// <summary>A UI item, such as a button, that issues a rename command.</summary>
          SIID_RENAME = 83,
          /// <summary>A UI item, such as a button, that issues a delete command.</summary>
          SIID_DELETE = 84,
          /// <summary>Audio DVD media.</summary>
          SIID_MEDIAAUDIODVD = 85,
          /// <summary>Movie DVD media.</summary>
          SIID_MEDIAMOVIEDVD = 86,
          /// <summary>Enhanced CD media.</summary>
          SIID_MEDIAENHANCEDCD = 87,
          /// <summary>Enhanced DVD media.</summary>
          SIID_MEDIAENHANCEDDVD = 88,
          /// <summary>High definition DVD media in the HD DVD format.</summary>
          SIID_MEDIAHDDVD = 89,
          /// <summary>High definition DVD media in the Blu-ray Disc? format.</summary>
          SIID_MEDIABLURAY = 90,
          /// <summary>Video CD (VCD) media.</summary>
          SIID_MEDIAVCD = 91,
          /// <summary>DVD+R media.</summary>
          SIID_MEDIADVDPLUSR = 92,
          /// <summary>DVD+RW media.</summary>
          SIID_MEDIADVDPLUSRW = 93,
          /// <summary>A desktop computer.</summary>
          SIID_DESKTOPPC = 94,
          /// <summary>A mobile computer (laptop).</summary>
          SIID_MOBILEPC = 95,
          /// <summary>The User Accounts Control Panel item.</summary>
          SIID_USERS = 96,
          /// <summary>Smart media.</summary>
          SIID_MEDIASMARTMEDIA = 97,
          /// <summary>CompactFlash media.</summary>
          SIID_MEDIACOMPACTFLASH = 98,
          /// <summary>A cell phone.</summary>
          SIID_DEVICECELLPHONE = 99,
          /// <summary>A digital camera.</summary>
          SIID_DEVICECAMERA = 100,
          /// <summary>A digital video camera.</summary>
          SIID_DEVICEVIDEOCAMERA = 101,
          /// <summary>An audio player.</summary>
          SIID_DEVICEAUDIOPLAYER = 102,
          /// <summary>Connect to network.</summary>
          SIID_NETWORKCONNECT = 103,
          /// <summary>The Network and Internet Control Panel item.</summary>
          SIID_INTERNET = 104,
          /// <summary>A compressed file with a .zip file name extension.</summary>
          SIID_ZIPFILE = 105,
          /// <summary>The Additional Options Control Panel item.</summary>
          SIID_SETTINGS = 106,
          /// <summary>High definition DVD drive (any type - HD DVD-ROM, HD DVD-R, HD-DVD-RAM) that uses the HD DVD format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_DRIVEHDDVD = 132,
          /// <summary>High definition DVD drive (any type - BD-ROM, BD-R, BD-RE) that uses the Blu-ray Disc format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_DRIVEBD = 133,
          /// <summary>High definition DVD-ROM media in the HD DVD-ROM format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_MEDIAHDDVDROM = 134,
          /// <summary>High definition DVD-R media in the HD DVD-R format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_MEDIAHDDVDR = 135,
          /// <summary>High definition DVD-RAM media in the HD DVD-RAM format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_MEDIAHDDVDRAM = 136,
          /// <summary>High definition DVD-ROM media in the Blu-ray Disc BD-ROM format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_MEDIABDROM = 137,
          /// <summary>High definition write-once media in the Blu-ray Disc BD-R format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_MEDIABDR = 138,
          /// <summary>High definition read/write media in the Blu-ray Disc BD-RE format.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_MEDIABDRE = 139,
          /// <summary>A cluster disk array.</summary>
          /// <remarks>Windows Vista with SP1 and later.</remarks>
          SIID_CLUSTEREDDRIVE = 140,
          /// <summary>The highest valid value in the enumeration.</summary>
          /// <remarks>Values over 160 are Windows 7-only icons.</remarks>
          SIID_MAX_ICONS = 175
          }

          [Flags]
          public enum SHGSI : uint
          {
          /// <summary>The szPath and iIcon members of the SHSTOCKICONINFO structure receive the path and icon index of the requested icon, in a format suitable for passing to the ExtractIcon function. The numerical value of this flag is zero, so you always get the icon location regardless of other flags.</summary>
          SHGSI_ICONLOCATION = 0,
          /// <summary>The hIcon member of the SHSTOCKICONINFO structure receives a handle to the specified icon.</summary>
          SHGSI_ICON = 0x000000100,
          /// <summary>The iSysImageImage member of the SHSTOCKICONINFO structure receives the index of the specified icon in the system imagelist.</summary>
          SHGSI_SYSICONINDEX = 0x000004000,
          /// <summary>Modifies the SHGSI_ICON value by causing the function to add the link overlay to the file's icon.</summary>
          SHGSI_LINKOVERLAY = 0x000008000,
          /// <summary>Modifies the SHGSI_ICON value by causing the function to blend the icon with the system highlight color.</summary>
          SHGSI_SELECTED = 0x000010000,
          /// <summary>Modifies the SHGSI_ICON value by causing the function to retrieve the large version of the icon, as specified by the SM_CXICON and SM_CYICON system metrics.</summary>
          SHGSI_LARGEICON = 0x000000000,
          /// <summary>Modifies the SHGSI_ICON value by causing the function to retrieve the small version of the icon, as specified by the SM_CXSMICON and SM_CYSMICON system metrics.</summary>
          SHGSI_SMALLICON = 0x000000001,
          /// <summary>Modifies the SHGSI_LARGEICON or SHGSI_SMALLICON values by causing the function to retrieve the Shell-sized icons rather than the sizes specified by the system metrics.</summary>
          SHGSI_SHELLICONSIZE = 0x000000004
          }

          [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
          public struct SHSTOCKICONINFO
          {
          public UInt32 cbSize;
          public IntPtr hIcon;
          public Int32 iSysIconIndex;
          public Int32 iIcon;
          [MarshalAs(UnmanagedType.ByValTStr, SizeConst = UACIcon.MAX_PATH)]
          public string szPath;
          }

          說明:SHSTOCKICONID這里實際只需要定義SIID_SHIELD這一個值就行了,我這里全部貼出來了,以后需要用到的時候可以直接到這里復制了。

          2)定義UACIcon的類,在這個類里封裝獲取UAC圖標的方法

          public class UACIcon
          {
          public const int MAX_PATH = 260;

          [DllImport("Shell32.dll", SetLastError = false)]
          public static extern Int32 SHGetStockIconInfo(SHSTOCKICONID siid, SHGSI uFlags, ref SHSTOCKICONINFO psii);

          [DllImport("user32.dll", SetLastError = true)]
          static extern bool DestroyIcon(IntPtr hIcon);

          public static BitmapSource GetUACIcon()
          {
          BitmapSource shieldSource = ;

          SHSTOCKICONINFO sii = new SHSTOCKICONINFO();
          sii.cbSize = (UInt32)Marshal.SizeOf(typeof(SHSTOCKICONINFO));

          Marshal.ThrowExceptionForHR(SHGetStockIconInfo(SHSTOCKICONID.SIID_SHIELD,
          SHGSI.SHGSI_ICON | SHGSI.SHGSI_LARGEICON,
          ref sii));

          shieldSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
          sii.hIcon,
          Int32Rect.Empty,
          BitmapSizeOptions.FromEmptyOptions());

          DestroyIcon(sii.hIcon);
          return shieldSource;
          }
          }

          上面的代碼中包含了從句柄創建WPF ImageSource的代碼,如果對這一塊不了解的話,可以參考[3]

          3)界面XAML如下:

          <Grid>
          <Button Width="74" Height="28">
          <Button.Content>
          <Grid>
          <Grid.ColumnDefinitions>
          <ColumnDefinition Width="32"/>
          <ColumnDefinition/>
          </Grid.ColumnDefinitions>

          <Image Stretch="Uniform" x:Name="img_Icon" Width="18" Height="18" HorizontalAlignment="Right"/>
          <Label Content="確認" Grid.Column="1" HorizontalAlignment="Left"/>
          </Grid>
          </Button.Content>
          </Button>
          </Grid>

          4)加載圖標

          public partial class MainWindow : Window
          {
          public MainWindow()
          {
          InitializeComponent();
          this.img_Icon.Source = UACIcon.GetUACIcon();
          }
          }

          運行效果:

          參考資料

          [1]

          原文鏈接: https://www.cnblogs.com/zhaotianff/p/17662237.html

          [2]

          上一篇: https://www.cnblogs.com/zhaotianff/p/17662167.html

          [3]

          參考: https://learn.microsoft.com/en-us/dotnet/api/system.windows.interop.imaging.createbitmapsourcefromhicon?view=windowsdesktop-7.0

          信公眾號:Dotnet9,網站:Dotnet9,問題或建議:請網站留言, 如果對您有所幫助:歡迎贊賞。

          .NET CORE(C#) WPF亞克力窗體

          閱讀導航

          1. 本文背景
          2. 代碼實現
          3. 本文參考
          4. 源碼

          1. 本文背景

          本文介紹使用FluentWPF控件庫實現亞克力效果的窗體。



          2. 代碼實現

          使用 .Net Core 3.1 創建名為 “AcrylicWindow” 的WPF模板項目,添加三個Nuget庫:MaterialDesignThemes、MaterialDesignColors和FluentWPF,其中亞克力效果是由FluentWPF控件庫實現的。

          以下為三個庫具體版本:

          <?xml version="1.0" encoding="utf-8"?>
          <packages>
            <package id="FluentWPF" version="0.4.0" targetFramework="net461" />
            <package id="MaterialDesignColors" version="1.1.2" targetFramework="net461" />
            <package id="MaterialDesignThemes" version="2.4.1.1101" targetFramework="net461" />
          </packages>

          解決方案主要文件目錄組織結構:

          • AcrylicWindowApp.xamlMainWindow.xamlMainWIndow.xaml.cs

          2.1 引入樣式

          文件【App.xaml】,在StartupUri中設置啟動的視圖【MainWindow.xaml】,并在【Application.Resources】節點增加MaterialDesignThemes和FluentWPF控件庫的樣式文件:

          <Application x:Class="AcrylicWindow.App"
                       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                       StartupUri="MainWindow.xaml">
              <Application.Resources>
                  <ResourceDictionary>
                      <ResourceDictionary.MergedDictionaries>
                          <!--  FluentWPF Controls  -->
                          <ResourceDictionary Source="pack://application:,,,/FluentWPF;component/Styles/Controls.xaml" />
          
                          <!-- Material Design Controls-->
                          <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                          <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml"/>
                      </ResourceDictionary.MergedDictionaries>
                  </ResourceDictionary>
              </Application.Resources>
          </Application>

          2.2 演示窗體布局

          文件【MainWindow.xaml】,引入MaterialDesignThemes和FluentWPF控件庫的命名空間,源碼如下:

          <Window x:Class="AcrylicWindow.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
                  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                  xmlns:fw="clr-namespace:SourceChord.FluentWPF;assembly=FluentWPF"
                  mc:Ignorable="d"
                  fw:AcrylicWindow.Enabled="True" fw:AcrylicWindow.AcrylicWindowStyle="None"
                  MouseDown="Window_MouseDown" FontSize="15" Height="600" Width="1080" WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
              <Grid>
                  <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="350"/>
                      <ColumnDefinition Width="*"/>
                  </Grid.ColumnDefinitions>
          
                  <Grid fw:PointerTracker.Enabled="True" Background="#01FFFFFF">
                      <StackPanel>
                          <StackPanel Orientation="Horizontal">
                              <Button Foreground="Black" Background="{x:Null}" BorderBrush="{x:Null}">
                                  <materialDesign:PackIcon Kind="ArrowLeft"/>
                              </Button>
                              <TextBlock Text="Settings" FontSize="12" Margin="10" VerticalAlignment="Center"/>
                          </StackPanel>
                          <ListViewItem Padding="0">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="Home" Margin="15"/>
                                  <TextBlock Text="Home" VerticalAlignment="Center"/>
                              </StackPanel>
                          </ListViewItem>
                          <TextBlock Text="System" Margin="15" FontWeight="DemiBold"/>
                          <ListView FontSize="15">
                              <ListViewItem Padding="1">
                                  <StackPanel Orientation="Horizontal">
                                      <materialDesign:PackIcon Kind="Monitor" Margin="15"/>
                                      <TextBlock Text="Video" VerticalAlignment="Center"/>
                                  </StackPanel>
                              </ListViewItem>
                              <ListViewItem Padding="1">
                                  <StackPanel Orientation="Horizontal">
                                      <materialDesign:PackIcon Kind="Headphones" Margin="15"/>
                                      <TextBlock Text="Audio" VerticalAlignment="Center"/>
                                  </StackPanel>
                              </ListViewItem>
                              <ListViewItem Padding="1">
                                  <StackPanel Orientation="Horizontal">
                                      <materialDesign:PackIcon Kind="MessageOutline" Margin="15"/>
                                      <TextBlock Text="Notifications" VerticalAlignment="Center"/>
                                  </StackPanel>
                              </ListViewItem>
                              <ListViewItem Padding="1">
                                  <StackPanel Orientation="Horizontal">
                                      <materialDesign:PackIcon Kind="BatteryOutline" Margin="15"/>
                                      <TextBlock Text="Battery" VerticalAlignment="Center"/>
                                  </StackPanel>
                              </ListViewItem>
                          </ListView>
                      </StackPanel>
                  </Grid>
                  <Grid Grid.Column="1" Background="White">
          
                  </Grid>
              </Grid>
          </Window>

          關鍵點說一下:

          1. 作者源碼中隱藏標題欄使用的【fw:AcrylicWindow.ShowTitleBar="False"】,站長使用 .NET CORE 3.1創建的項目提示該屬性不存在,遂嘗試敲打出【fw:AcrylicWindow.AcrylicWindowStyle="None"】屬性替代,效果一樣的;
          2. fw:AcrylicWindow.Enabled 屬性是是否啟用亞克力效果的開關,設置為True,效果見上面演示動畫;設置為False,效果圖如下:
          3. 演示窗體分為左右兩部分,左側設置Grid背景色“#01FFFFFF”,帶有透明度才能看出亞克力效果,右側Grid背景色設置為白色,方便左右對比。

          后臺代碼【MainWindow.xaml.cs】實現鼠標左鍵拖動窗體功能:

          private void Window_MouseDown(object sender, MouseButtonEventArgs e)
          {
              DragMove();
          }

          3.本文參考

          1. 視頻一:C# WPF Design UI: Transparent/Acrylic Window,配套源碼:AcrylicWindow。

          4.源碼

          文中代碼已經全部給出,可直接Copy代碼,按解決方案目錄組織代碼文件即可運行,另附原作者視頻及源碼【見3.本文參考】、站長成功編譯的Demo(點擊下載->AcrylicWindow)。

          除非注明,文章均由 Dotnet9 整理發布,歡迎轉載。轉載請注明本文地址:https://dotnet9.com/7372.html

          時間如流水,只能流去不流回!

          點擊【閱讀原文】,本站還有更多技術類文章等著您哦,此刻順便為我點個“再看”可好?

          天有個想法想驗證一下,但是感覺項目組web前臺,后臺這樣開發,再聯調效率有點低。

          因此,想回歸到原始的windows窗口程序,簡單直接。

          一直都很懷念當年的delphi,開發速度,尤其是開發界面速度不要太快!

          delphi沒落了后,開始用VS,Visual studio,不是現在前端開發用的vs code。

          下載了第三方的demo后,發現vs2022中,無法將一個按鈕等控件拖動到窗體上,這不扯嗎,找原因沒找到。

          vs2022卸載了,裝vs2015,又發現安裝不是,老是找不到包,以前可不這樣,一路next就安裝下去了。難不成。。。

          又回到vs2022,通過網絡安裝,安裝上來,再打開,居然可以了。。。以前按鈕,控件都是灰的,無法拖動上去。

          都是界面控件可視化設計操作,怎么有點不一樣呢,沒有以前絲滑了。

          一看,程序文件是XAML文件,打開一看,能看明白,是xml格式的控件描述。

          直接用winforms多好,簡單(不粗暴)。

          既然第一次遇到,那就徹底搞明白。

          什么是 WPF

          WPF(Windows Presentation Foundation)是由微軟開發的桌面應用程序框架,用于創建現代化、高度交互和具有視覺吸引力的用戶界面。它是 .NET Framework 的一部分,提供了一種基于 XAML(Extensible Application Markup Language)語言的聲明性編程模型,可以很容易地創建動態、靈活的用戶界面,并且可以與其他 .NET 技術無縫集成。WPF 還具有強大的數據綁定和可重用性,使開發人員可以更快地構建和維護應用程序。WPF 也支持硬件加速和高分辨率顯示,為用戶帶來更好的體驗。

          WPF 和 Winform 的區別

          WPF(Windows Presentation Foundation)和 WinForms(Windows Forms)都是用于創建 Windows 桌面應用程序的框架,但它們有一些重要的區別:

          1. 編程模型:WPF 是基于 XAML 的聲明性編程模型,它可以很容易地創建動態、靈活的用戶界面,支持動畫和高級視覺效果。而 WinForms 則是基于傳統的命令式編程模型,需要在代碼中手動設置每個控件的屬性和事件處理程序。
          2. 數據綁定:WPF 有一個強大的數據綁定系統,可以將 UI 元素和數據源相互綁定,使應用程序更容易管理和更新數據。WinForms 也支持數據綁定,但不如 WPF 靈活。
          3. 可重用性:WPF 支持樣式和模板,使 UI 元素可以輕松地重用和自定義,這大大簡化了應用程序的開發和維護。WinForms 則需要手動創建每個 UI 元素,不太容易重用。
          4. 矢量圖形和分辨率:WPF 使用矢量圖形,可在高分辨率屏幕上呈現清晰的圖像,而 WinForms 使用像素圖形,可能在高分辨率屏幕上顯示模糊或失真。

          什么是XAML

          Extensible Application Markup Language (Extensible Application Markup Language, XAML) 是一種聲明性語言。 具體來講,XAML 可初始化對象和設置對象的屬性,使用一種可顯示多個對象間分層關系的語言結構,還使用了一種支持類型擴展的支持類型約定。

          使用 WPF 時首先遇到的事情之一是 XAML。XAML 代表可擴展應用程序標記語言,一種基于 XML 的簡單的聲明性語言,是微軟用于描述 GUI 的 XML 變種。在之前的 GUI 框架如 WinForms 中,GUI 是用相同語言創建,例如 C# 或 VB.NET ,并且通常由設計者來維護。但是,通過 XAML,微軟使用了另一種方式。非常類似HTML,你現在能輕松編寫你的GUI。

          什么是UWP

          通用 Windows 平臺 (UWP),可以生成適用于任何 Windows 設備(電腦、Xbox One、HoloLens 等等)的應用,然后將這些應用發布到 Store。


          主站蜘蛛池模板: 美女视频黄a视频全免费网站一区 美女免费视频一区二区 | 国产免费av一区二区三区| 精品免费国产一区二区| 国产伦一区二区三区高清| 免费萌白酱国产一区二区三区| 精品无码一区二区三区电影| 一区二区三区在线播放| 国产中的精品一区的| 午夜性色一区二区三区不卡视频| 久久se精品一区精品二区| 中文字幕在线播放一区| 熟女性饥渴一区二区三区| 国产一区视频在线免费观看| 日本一区二区三区日本免费| 国内精品一区二区三区东京| 日韩一区二区视频| 亚洲性无码一区二区三区| 国产怡春院无码一区二区| 亚洲大尺度无码无码专线一区| 亚洲熟女www一区二区三区| 精品无码综合一区二区三区| 国产成人精品视频一区| 国产精品亚洲综合一区| 亚洲国产精品一区二区久久hs | 日本一区二区不卡视频| 亚洲综合一区二区精品导航| 亚洲一区在线观看视频| 精品免费国产一区二区| 少妇人妻偷人精品一区二区| 亚洲爆乳无码一区二区三区| 国产伦精品一区二区三区不卡| 精品视频一区二区观看| 日韩人妻一区二区三区免费| 精品日韩一区二区| 国产日韩一区二区三区在线观看| 亚洲熟妇无码一区二区三区导航| 东京热无码一区二区三区av| 国产精品一区视频| 精品欧洲av无码一区二区三区| 亚洲免费视频一区二区三区| 亚洲av无码一区二区三区在线播放 |