2011-04-27 83 views
1

WPF允許使用Transform的子類來縮放(ScaleTransform),旋轉(RotateTransform),傾斜(SkewTransform)等等任何FrameworkElementWPF中的剪裁變換?

但我看不到如何使用這些來裁剪一些FrameworkElement。有什麼辦法可以讓我們說一個寬度爲30px的Label,所以它的行爲就好像它的寬度是20px一樣?

更準確地說:我想在佈局之前這樣做,以便Label可以像寬度爲20一樣佈置。但是我希望它完全渲染,因此最後10個像素也會被渲染(可能與其他元素重疊)。我怎樣才能做到這一點 ?

爲什麼我需要這個?我想要H.B.'s answer以我的問題Create guitar chords editor in WPFkerning一起使用。

回答

1

在標籤上使用負面的Margin,例如, Margin="0,0,-10,0"使標籤在右側縮短了10個像素,佈局明智。 (爲了防止重疊,把它放在一個容器中,並設置ClipToBounds="True"

+0

H.B .: +1這是我得到的最快最好的答案。這也是一個解決方案,但如果我真的想讓佈局系統的前一個元素縮短5個像素但仍然完全渲染它?而不是設置下一個元素的邊距'Margin =「 - 5,0,0,0」'?因爲這就是其他編輯器(如RichTextBox)處理字距問題的方式。我不是爲什麼他們不使用邊距這樣的東西,但突出顯示文本等(當元素相互重疊時)可能會出現問題。 – drasto 2011-04-27 18:53:28

+1

我不太明白你的問題,如果你在上一個項目中設置'Margin =「0,0,-5,0」',它應該更短,並且仍然呈現,除非你設置了裁剪。 – 2011-04-27 19:16:29

+0

哦,我明白了。是的,它正在工作。謝謝。 – drasto 2011-04-27 19:34:18

0

我的問題與H.B.的解決方案是,我不能只綁定頂部邊距。

我使用XAML這樣構建kindof圓形進度(橢圓形,其被在頂部裁剪):當我改變畫布的高度

<Canvas Name="ProgressIndicator" Width="120" Height="{Binding ProgressIndicatorHeight}" ClipToBounds="True"> 
    <Ellipse Width="120" Canvas.Bottom="0" Height="120" Fill="#FF7090B7"/> 
</Canvas> 

,橢圓的頂部被裁剪(因爲它與畫布的底部對齊)。如果我將它對齊到頂部(默認),它將在底部裁剪。

我在圓形圖標裏面使用這個構造來按比例填充它的進度。