wpf 僅用 rectangle 實現圓柱形進度條

wpf 僅用 rectangle 實現圓柱形進度條

本文將簡單居間如何僅使用 rectangle 實現圓柱形進度條

最后更新 2022/2/21 下午2:50
dino.c
预计阅读 3 分钟
分类
WPF
标签
.NET WPF

本文將簡單居間如何僅使用 rectangle 實現圓柱形進度條,成果如上圖所示。

圓柱形進度條不難實現,不過有趣的是它完全由代表矩形的 rectangle 組成,這稍微有點反直覺。

首先我們需要重溫一些基礎知識:rectangle 顯示帶圓角的矩形。用 radiusx 和 radiusy 可分別指定用於使矩形的角變圓的橢圓的 x 軸和 y 軸半徑。

如下面這個例子,可以看到 radiusx="50" radiusy="20" 的 rectangle 的圓角和 width="100" height="40" 的 ellipse (x 軸半徑 50,y 軸半徑 20)完全重合在一起。

<Rectangle
  Height="100"
  Width="100"
  Fill="#FF7E9EC0"
  Stroke="#FFFF0EC4"
  StrokeThickness="5"
  RadiusX="50"
  RadiusY="20"
/>
<Ellipse
  HorizontalAlignment="Left"
  VerticalAlignment="Top"
  StrokeThickness="5"
  Stroke="Yellow"
  Fill="Red"
  Width="100"
  Height="40"
  Opacity="0.5"
/>

現在我們把上面的 rectangle 拉長,就成了圓柱的基本形狀;反過來將它壓扁,就成了圓柱的截面。再把它們設置成半透明的,就成了圓柱形進度條的背景:

<Grid.Resources>
  <style TargetType="Rectangle">
    <Setter Property="Fill" Value="#36a8e2" />
    <Setter Property="RadiusX" Value="25" />
    <Setter Property="RadiusY" Value="5" />
  </style>
</Grid.Resources>
<Rectangle Opacity="0.2" />
<Rectangle Height="10" VerticalAlignment="Top" Opacity="0.1" />

再在下面加上一個不透明的 rectangle:

<Rectangle Height="100" VerticalAlignment="Bottom" />

看著很像進度條了,但是完全沒有立體效果,所以還要再疊加一個半透明並且漸變的 rectangle:

<Rectangle Opacity="0.6">
  <Rectangle.Fill>
    <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,.5">
      <GradientStop Color="Black" />
      <GradientStop Offset="1" Color="Transparent" />
      <GradientStop Offset="0.6" Color="#41000000" />
    </LinearGradientBrush>
  </Rectangle.Fill>
</Rectangle>

很接近了,可是上面的截面不明顯,最後還需要再加一個代表截面的 rectangle:

<Grid Height="100" VerticalAlignment="Bottom">
  <Rectangle Height="10" VerticalAlignment="Top" />
</Grid>

現在看著像那麼一回事了。不過這些只是 ui 方面的基礎概念,要將它轉換成 progressbar 還是需要做得複雜一些,具體代碼可見這個項目:

原文作者:dino.c

原文連結:https://www.cnblogs.com/dino623/p/wpf_column_progress_bar.html

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2025/1/26

wpf 藉助自定義 xml 文件實現國際化

本文詳細居間了在wpf程式中使用自定義xml文件實現國際化的方法,包括安裝必備nuget包、動態獲取語言列表、動態切換語言、在代碼和xaml界面中使用翻譯字符串等內容,同時提供了源碼連結,幫助開發者輕鬆實現wpf應用的國際化。

继续阅读