2011-04-27 45 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> 

,椭圆的顶部被裁剪(因为它与画布的底部对齐)。如果我将它对齐到顶部(默认),它将在底部裁剪。

我在圆形图标里面使用这个构造来按比例填充它的进度。