時間如流水,只能流去不流回!
點贊再看,養成習慣,這是您給我創作的動力!
本文 Dotnet9 https://dotnet9.com 已收錄,站長樂于分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分享自己熟悉的、自己會的,
閱讀導航:
- 一、先看效果
- 二、本文背景
- 三、代碼實作
- 四、文章參考
- 五、代碼下載
一、先看效果
二、本文背景
有沒有這種場景:開源控制元件庫或者收費的控制元件庫,條形圖或者柱狀圖都非常強大,但我的業務就是不符合,就是要自己設計呢?本文通過簡單的實作一個條形圖功能,以后類似的統計圖可以在這上面進行修改,原理是類似的,
三、代碼實作
小編使用.Net Core 3.1創建的WPF工程,創建名稱為“BarChart”的解決方案后,添加名稱為”Bar“的WPF用戶控制元件,這個控制元件就是上圖中的單個柱子,下面是Bar.xaml代碼
1 <UserControl x:Class="BarChart.Bar" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 mc:Ignorable="d" 7 MinHeight="20" Width="Auto" Loaded="UserControl_Loaded"> 8 <Grid SizeChanged="Grid_SizeChanged"> 9 <Grid Background="{Binding Background,ElementName=border}" Opacity="0.3"/> 10 <Border x:Name="border" Background="{Binding Color}" VerticalAlignment="Bottom" Height="{Binding BarHeight}"/> 11 <TextBlock VerticalAlignment="Center" Margin="3" HorizontalAlignment="Center" Text="{Binding Value}" FontSize="20"> 12 <TextBlock.Effect> 13 <DropShadowEffect BlurRadius="1" ShadowDepth="0" Color="White"/> 14 </TextBlock.Effect> 15 </TextBlock> 16 </Grid> 17 </UserControl>
Bar.xaml.cs代碼,主要是系結前景色及背景色,及柱子百分比值,
1 using System.ComponentModel; 2 using System.Windows; 3 using System.Windows.Controls; 4 using System.Windows.Media; 5 6 namespace BarChart 7 { 8 /// <summary> 9 /// BarChart.xaml 的互動邏輯 10 /// </summary> 11 public partial class Bar : UserControl, INotifyPropertyChanged 12 { 13 public event PropertyChangedEventHandler PropertyChanged; 14 private void NotifyPropertyChanged(string info) 15 { 16 if (PropertyChanged != null) 17 { 18 PropertyChanged(this, new PropertyChangedEventArgs(info)); 19 } 20 } 21 22 private double _value; 23 public double Value 24 { 25 get { return _value; } 26 set 27 { 28 _value =https://www.cnblogs.com/Dotnet9-com/p/ value; 29 UpdateBarHeight(); 30 NotifyPropertyChanged("Value"); 31 } 32 } 33 34 private double maxValue; 35 public double MaxValue 36 { 37 get { return maxValue; } 38 set 39 { 40 maxValue =https://www.cnblogs.com/Dotnet9-com/p/ value; 41 UpdateBarHeight(); 42 NotifyPropertyChanged("MaxValue"); 43 } 44 } 45 46 private double barHeight; 47 public double BarHeight 48 { 49 get { return barHeight; } 50 set 51 { 52 barHeight = value; 53 NotifyPropertyChanged("BarHeight"); 54 } 55 } 56 57 private Brush color; 58 public Brush Color 59 { 60 get { return color; } 61 set 62 { 63 color = value; 64 NotifyPropertyChanged("Color"); 65 } 66 } 67 68 private void UpdateBarHeight() 69 { 70 if (maxValue > 0) 71 { 72 var percent = (_value * 100) / maxValue; 73 BarHeight = (percent * this.ActualHeight) / 100; 74 } 75 } 76 77 public Bar() 78 { 79 InitializeComponent(); 80 81 this.DataContext = this; 82 color = Brushes.Black; 83 } 84 85 86 private void UserControl_Loaded(object sender, RoutedEventArgs e) 87 { 88 UpdateBarHeight(); 89 } 90 91 private void Grid_SizeChanged(object sender, SizeChangedEventArgs e) 92 { 93 UpdateBarHeight(); 94 } 95 } 96 }
主表單MainWindow.xaml,添加顯示的業務資料,目前只是展示了進度值,其他標簽只要你看懂了代碼,很好加的,比如每根柱子,上面顏色顯示一種意義名稱、下面顯示另一種意義名稱,
1 <Window x:Class="BarChart.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:BarChart" 7 mc:Ignorable="d" 8 Background="#FF252525" FontFamily="Nontserrrat" 9 Title="MainWindow" Height="600" Width="1080" WindowStyle="None" ResizeMode="NoResize" WindowStartupLocation="CenterScreen"> 10 <Grid> 11 <Grid.RowDefinitions> 12 <RowDefinition Height="70"/> 13 <RowDefinition Height="*"/> 14 </Grid.RowDefinitions> 15 16 <Border BorderBrush="Gray" BorderThickness="0 0 0 1"> 17 <TextBlock Text="Dotnet9.com" VerticalAlignment="Center" Margin="15" 18 Foreground="White" FontSize="24"/> 19 </Border> 20 21 <Border Grid.Row="1" Width="500" Height="300" VerticalAlignment="Top" 22 HorizontalAlignment="Left" Margin="20" Background="White" 23 BorderBrush="Gray" CornerRadius="12"> 24 <Grid> 25 <TextBlock Text="自定義條形圖" Margin="10" FontSize="15"/> 26 <StackPanel Orientation="Horizontal" Height="200" VerticalAlignment="Bottom"> 27 <local:Bar Background="#FF4455AA" Color="#FF88AA55" MaxValue="100" Value="80" Margin="5"/> 28 <local:Bar Background="#FF4335AA" Color="#FF883355" MaxValue="100" Value="26" Margin="5"/> 29 <local:Bar Background="#F26455AA" Color="#FF88A355" MaxValue="100" Value="49" Margin="5"/> 30 <local:Bar Background="#FF4423AA" Color="#FF88A115" MaxValue="100" Value="23" Margin="5"/> 31 <local:Bar Background="#FF4415AA" Color="#FF887955" MaxValue="100" Value="97" Margin="5"/> 32 <local:Bar Background="#FF44513A" Color="#FF896A55" MaxValue="100" Value="68" Margin="5"/> 33 </StackPanel> 34 </Grid> 35 </Border> 36 </Grid> 37 </Window>
四、文章參考
參考:
Design com WPF : https://www.youtube.com/watch?v=3Rz9YrwrznQ
五、代碼下載
文章中代碼已經全部貼出,小編這里還是建議:能使用開源的控制元件庫還是使用開源控制元件庫吧,自己定義確實有點麻煩,
本文只是給個例子,方便自定義擴展,
除非注明,文章均由 Dotnet9 整理發布,歡迎轉載,
轉載請注明本文地址:https://dotnet9.com/2019/12/it-technology/csharp/wpf/custom-barchart.html
歡迎掃描下方二維碼關注 Dotnet9 的微信公眾號,本站會及時推送最新技術文章(微信公眾號“dotnet9_com”):
如有識訓,請大力轉發,給Dotnet9贊助和支持,謝謝大家對dotnet技術的關注和支持 ,
本站使用 wpcom 的 JustNews主題
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/16096.html
標籤:WPF
上一篇:C# WPF有趣的登錄加載表單
下一篇:基于C# WPF框架的貪吃蛇
