在WPF中製作正圓形公章

2021-09-07 20:18:40 字數 2578 閱讀 8791

原文:

在wpf中製作正圓形公章

之前,我利用c#與gdi+程式製作過正圓形公章(利用c#製作公章 ,c#製作公章[續])並將它整合到乙個小軟體中(個性印章及公章的畫法及實現),今天我們來**一下wpf中如何製作正圓形公章。

先看大致效果:

圖1製作前,我們首先來分析技術難點和要點:

1、首先,我們需要設定公章的起始位置,公章的直徑等。

2、再根據這些來確定公章的中心點。有了中心點之後,我們才可以計算中間正五角星的中心以及公章中文字的旋轉中心點。

3、計算公章中每個文字的旋轉角度,然後複製、複製、再複製。

從上圖中可以看出,當文字為英文本母時,會有位置偏移問題,後面我將說明如何解決這種問題。最終解決結果類似於下圖(注意字母a居於正中間):

圖2製作步驟:(這裡只是相關xaml**的展示,未含c#**)

1. 首先畫外面的正圓:

這裡沒什麼好說的,正圓的高、寬度均為248,邊線使用#ffff0000(紅色),邊框寬度為1,如果你認為外框還不夠粗,可以將strokethickness設定為合適的值,比如2。

2. 製作乙個公章文字作為「樣本」。

先製作乙個樣本,後面的部分利用程式copy即可。為了更方便講述,我們先假設公章文字個數為奇數,這樣,最中間的乙個文字就正好放在圓形的正上方。如果公章文字個數不是奇數而是偶數,我們後面利用程式來做。

這裡,製作正中間的文字,如下圖的正中間最上方那個「科」字。

這是xaml**:

注意上面**中的加粗部分:

(1)rendertransformorigin屬性

它指明文字旋轉的中心點。這裡0.5,2.925是對文字的正常字身高而言的。這就意味著此值是旋轉中心點(這裡就是下圖中正五角星之正中間所示的圓形白點處)在離textblock左上角相對於正常字身高的水平、垂直比率。請仔細觀察下圖旋轉中心點相對於「科」字左上角的x,y方向的比率。想想看,假如是在文字正中間進行旋轉呢?(此時,rendertransformorigin屬性值大致應該是0.5,0.5)

圖3(2)textalignment屬性

它指明文字相對於textblock外框(它的寬度 width="36",高度height="40")的文字對齊位置。

(3)scaletransform:

這裡有 scalex和scaley屬性。其中,scalex控制文字的水平縮放比率,這裡是"0.8",即縮放為正常fontsize字身的80%;同理,scaley控制文字的垂直方向的比率,這裡是"1",即不縮放。

(4)rotatetransform:

它有乙個 angle屬性,用來設定旋轉的角度值,單位為「度」,一周為360度,不旋轉時為0。這裡為"0",表示不旋轉。順時針計算為正值,逆時針為負值。

-120"/>

(其他的文字我們在後面用c#**進行控制)

4、畫中間的正五角星:

#ffff0000"data="f1 m 55.467773,1.628906 l 68.130859,40.893066 l 109.385742,40.802734 l 75.957031,64.979004 l 88.791016,104.187500 l 55.467773,79.865234 l 22.144531,104.187500 l 34.978516,64.979004 l 1.549805,40.802734 l 42.804688,40.893066 l 55.467773,1.628906 z"margin="68,68,0,0" rendertransformorigin="0.5,0.5" horizontalalignment="left" verticalalignment="top" width="auto" height="auto">

這裡使用了wpf中的path,它相當於gdi+中的graphicspath,其中:

(1)fill屬性指定內部填充顏色,這裡是紅色(#ffff0000),如果你對顏色不太了解,可以看看這篇《gdi+與wpf中的顏色簡析》。

(2)data屬性設定路徑的相關資料。

(3)上面還對路徑進行了縮放,水平和垂直大小均縮放為原來的0.68倍。

接下來的問題是:如何用c#**來進行自動控制?

WPF中製作無邊框窗體

原文 wpf中製作無邊框窗體 眾所周知,在winform中,如果要製作乙個無邊框窗體,可以將窗體的formborderstyle屬性設定為none來完成。如果要製作成異形窗體,則需要使用或者使用gdi 自定義繪製。那麼,在wpf中,我們怎樣製作乙個無邊框窗體呢?答案是將window的windowst...

WPF中製作無邊框窗體

原文 wpf中製作無邊框窗體 眾所周知,在winform中,如果要製作乙個無邊框窗體,可以將窗體的formborderstyle屬性設定為none來完成。如果要製作成異形窗體,則需要使用或者使用gdi 自定義繪製。那麼,在wpf中,我們怎樣製作乙個無邊框窗體呢?答案是將window的windowst...

在WPF窗體中重繪

寫這篇主要是為了驗證任何元素自身都具備繪圖功能.在預設window中重寫onrender方法 protected override void onrender drawingcontext drawingcontext 結果還是空白一片.窗體的預設視覺樹 解決方法1 去掉預設視覺樹 protecte...