2013-07-31 114 views
6

我想在WPF創建這個(我知道我可以只使用一個圖像,但我想學習WPF):WPF TextBlock的重疊橢圓

http://www.iconarchive.com/show/ios7-icons-by-visualpharm/info-icon.html

這是我到目前爲止但它沒有產生預期的結果,因爲,文本框似乎完全隱藏橢圓而它應該只是有一個透明背景:

<StackPanel> 
    <TextBlock HorizontalAlignment="Left" Margin="144,207,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/> 
    <Ellipse HorizontalAlignment="Left" Height="52" Margin="142,189,0,0" Stroke="Black" VerticalAlignment="Top" Width="52"/> 
</StackPanel> 

回答

16

你可以把這樣的事情在視框,使縮放更加容易,像這樣的東西。你需要刪除堆棧面板,它將堆疊一個在另一個之上的項目,這不是你在這裏之後的東西。在這種情況下,我使用了一個網格。

<Viewbox Width="100" Height="100"> 
    <Grid Width="20" Height="20"> 
     <Ellipse Stroke="Black"/> 
     <TextBlock HorizontalAlignment="Center" Text="i" TextAlignment="Center" VerticalAlignment="Center"/> 
    </Grid> 
</Viewbox> 

enter image description here

+0

不錯,正是我想要做的。 – user1477388

2

不要使用一個StackPanel這一點,它的目的是堆棧的東西,而不是讓他們重疊,您使用的是錯誤的工具。使用網格,它更適合你想要做的事情。

要獲得透明背景,您必須將TextBlock的Background property設置爲透明,或設置空背景。

Background={x:Null} 
5

因此,一個堆疊面板將把第一個項目放在最上面,第二個項目放在最下面,第二個放在第二個下面,等等。你可以做的是使用畫布或網格。就像堆棧面板一樣,它們是「內容控制」,並支持將多個對象放置在其中,就像您使用堆棧面板所做的一樣。

所以,一個真正快速的方法做你試圖完成會是什麼:

<Grid > 
     <Ellipse HorizontalAlignment="Left" Height="52" Stroke="Black" VerticalAlignment="Top" Width="52"/> 
     <TextBlock Text="i" FontSize="52" Margin="18,-13,-6,13" /> 
</Grid> 
6

或者你也可以使用Unicode字符:

代碼0x24D8

<TextBlock Text="ⓘ" FontSize="52" /> 
+0

這在一個有趣的答案。在所有機器上的這項工作是否是一種特殊的字體或我應該關注的東西? – user1477388

+1

它是標準的Unicode,應該可以在所有機器上運行(可以運行WPF),但是在使用特殊字體時必須進行測試。 –

+0

這與他所要求的無關,他想學習WPF(我認爲他正在試圖找出控件和佈局),使用char將無助於他實現這一點。 –