WPF|如何在 WPF 中設計漂亮的社交媒體信息儀錶板

来源:https://www.cnblogs.com/Dotnet9-com/archive/2022/05/13/16265577.html
-Advertisement-
Play Games

1. 效果展示 先來直接欣賞效果: 2. 準備 創建一個WPF工程,比如站長使用 .NET 7 創建名為 Dashboard3 的WPF項目,添加一些圖片資源,項目目錄如下: 2.1 圖片資源 可在網站 iconfont 下載 關閉、最小化 圖標,用於視窗右上角顯示: 有看到美女圖片沒?在百度圖片或 ...


1. 效果展示

先來直接欣賞效果:

2. 準備

創建一個WPF工程,比如站長使用 .NET 7 創建名為 Dashboard3 的WPF項目,添加一些圖片資源,項目目錄如下:

2.1 圖片資源

可在網站 iconfont 下載 關閉、最小化 圖標,用於視窗右上角顯示:

有看到美女圖片沒?在百度圖片或者谷歌圖片下載,比如 泰勒·斯威夫特 ,用於界面展示一個人的頭像:

2.2 字體圖標Nuget包:FontAwesome.WPF,該包提供一些圖標字體:

<PackageReference Include="FontAwesome.WPF" Version="4.7.0.9" />

編譯時,此包有如下提示:

已使用“.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8”而不是項目目標框架“net7.0-windows7.0”還原包“FontAwesome.WPF 4.7.0.9”。此包可能與項目不完全相容。

有.NET Core版本的字體圖標庫推薦嗎?可在下麵留言,謝謝,這裡不影響使用。

3. 簡單介紹

重點提及界面幾個地方:

3.1 水平菜單

如上圖,水平菜單是幾個TextBlox標簽,預設設置了字體的透明度為0.7,滑鼠懸浮時設置為1:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
    <TextBlock Text="分析" Opacity="1" Style="{StaticResource menuTitle}" />
    <TextBlock Text="排行榜" Style="{StaticResource menuTitle}" />
    <TextBlock Text="實時" Style="{StaticResource menuTitle}" />
    <TextBlock Text="趨勢" Style="{StaticResource menuTitle}" />
    <TextBlock Text="最喜歡的" Style="{StaticResource menuTitle}" />
</StackPanel>
<Style x:Key="menuTitle" TargetType="TextBlock">
    <Setter Property="Margin" Value="0 0 25 0" />
    <Setter Property="FontSize" Value="16" />
    <Setter Property="Opacity" Value="0.7" />
    <Setter Property="Foreground" Value="#FFFFFF" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Opacity" Value="1" />
        </Trigger>
    </Style.Triggers>
</Style>

3.2 豎直菜單

如上圖,豎直菜單是幾個按鈕,按鈕內容填充了字體圖標和文字,設置一些效果樣式:

<Button Style="{StaticResource menuButton}" Margin="0 10 0 0" Background="#AC0F0F" Foreground="#FFFFFF">
    <StackPanel>
        <fa:ImageAwesome Icon="Home" Style="{StaticResource menuButtonIcon}" />
        <TextBlock Text="儀錶盤" Style="{StaticResource menuButtonText}" />
    </StackPanel>
</Button>
<Style x:Key="menuButton" TargetType="{x:Type Button}">
    <Setter Property="Margin" Value="0 7 0 0" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="Width" Value="100" />
    <Setter Property="Height" Value="90" />
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Foreground" Value="#a9a9a9" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}" CornerRadius="15" Padding="15">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="#AC0F0F" />
            <Setter Property="Foreground" Value="#FFFFFF" />
        </Trigger>
        <Trigger Property="IsMouseCaptured" Value="True">
            <Setter Property="Background" Value="#921C1B" />
            <Setter Property="Foreground" Value="#FFFFFF" />
        </Trigger>
    </Style.Triggers>
</Style>


<Style x:Key="menuButtonIcon" TargetType="fa:ImageAwesome">
    <Setter Property="Foreground" Value="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" />
    <Setter Property="Width" Value="20" />
    <Setter Property="Height" Value="20" />
</Style>


<Style x:Key="menuButtonText" TargetType="TextBlock">
    <Setter Property="Margin" Value="0 7 0 0" />
</Style>

3.3 部分圖片和字體圖標

這個就不多說了,上面的代碼也有字體圖標的使用。

4. 結尾

這個面板的效果個人感覺很漂亮,由基本的TextBlockButton、字體圖標、圖片等組合、排版佈局就能做到很多效果,有興趣可以看看作者視頻(非常推薦),以及下方給出的源碼倉庫鏈接:

參考:

本文代碼:Dashboard3

時間如流水,只能流去不流回。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題 Mybatis四大對象的創建順序? Mybatis插件的執行順序? 工程創建 環境:Mybatis(3.5.9) mybatis-demo,參考官方文檔 簡單示例 這裡只放出main方法的示例,其餘類請看demo工程。 public static void main(String[] args ...
  • day1 Spring IOC 和 AOP 為內核 IOC inverse of control 控制反轉 AOP aspect oriented programing 面向切麵編程 展現層 WEB SpringMVC 持久層 DAO Spring JDBCTemplate 業務層 SERIVICE ...
  • 背景 在測試環境上遇到一個詭異的問題,部分業務邏輯會記錄用戶ID到資料庫,但記錄的數據會串,比如當前用戶的操作記錄會被其他用戶覆蓋, 而且這個現象是每次重啟後一小段時間內就正常 問題 線上程池內部使用了InheritableThreadLocal獲取用戶信息由於沒有及時remove,線程復用後,拿到 ...
  • “整篇文章較長,乾貨很多!建議收藏後,分章節閱讀。” 一、設計方案 整體設計方案思維導圖: 整篇文章,也將按照這個結構來講解。 若有重點關註部分,可點擊章節目錄直接跳轉! 二、項目背景 針對TOP250排行榜的數據,開發一套可視化數據大屏系統,展示各維度數據分析結果。 TOP250排行榜 三、電影爬 ...
  • OAuth2客戶端的配置參數非常多,雖然Id Server通過控制台可視化解決了創建OAuth2客戶端的問題。但是如何進一步降低OAuth2的使用難度,把創建的OAuth2客戶端轉化為配置成為了剛需,從技術角度上感覺也並不是很難實現。 我們先來看看效果,點擊配置生成按鈕即可直接生成Spring Se ...
  • 轉載:https://www.bilibili.com/video/BV1VQ4y1P7Fq?spm_id_from=333.1007.top_right_bar_window_history.content.click 概念 Stream是Java8 API的新成員,它允許以聲明性方式處理數據集合 ...
  • 嗨害嗨,作業來嘍 背包問題 01背包和完全背包問題都是一個背景下的:我有一個容量為M的背包,現在地上有N個物品,我跟個小偷似的眼裡只有i個物品的價值vi和重量wi,現在我要做的就是為了偷的東西更值錢拿走一些東西,使它們的價值是所有方案里最大的 01背包 背景如上,01背包就是我眼前的這些東西都是孤品 ...
  • 超鏈接(Hyperlink)可以看做是一個“熱點”,它可以從當前Web頁定義的位置跳轉到其他位置,包括當前頁的某個位置、Internet、本地硬碟或區域網上的其他文件,甚至跳轉到聲音、圖片等多媒體文件。瀏覽Web頁是超鏈接最普遍的一種應用,通過超鏈接還可以獲得不同形態的服務,如文件傳輸、資料查詢、電 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...