【问题标题】:Crop transform in WPF?WPF中的裁剪变换?
【发布时间】:2011-08-14 02:35:59
【问题描述】:

WPF 允许使用Transform 的子类来缩放(ScaleTransform)、旋转(RotateTransform)、倾斜(SkewTransform) 等等任何FrameworkElement

但我看不到如何使用这些裁剪一些FrameworkElement。有什么方法可以裁剪让我们说一个宽度为 30px 的Label,这样它的行为就好像它的宽度是 20px?

更准确地说:我想在布局之前这样做,这样Label 的布局就好像它的宽度是 20。但我希望它被完全渲染,所以最后 10 个像素也将被渲染(可能与其他元素重叠)。我该怎么做?

我为什么需要这个?我想让H.B.'s answer 我的问题Create guitar chords editor in WPFkerning 一起工作。

【问题讨论】:

    标签: .net wpf layout transform margin


    【解决方案1】:

    在标签上使用否定的Margin,例如Margin="0,0,-10,0" 在布局方面使右侧的标签缩短 10 个像素。 (为防止重叠,将其放入容器中并设置ClipToBounds="True"

    【讨论】:

    • HB:+1 这是我得到的最快的好答案。这也是一种解决方案,但是如果我真的想让布局系统的前一个元素 5 像素更短,但仍然完全渲染它怎么办?而不是设置下一个元素的边距Margin="-5,0,0,0"?因为这就是其他编辑器(如RichTextBox)处理字距调整的方式。我不知道为什么他们不使用诸如边距之类的东西来做,但是在突出显示文本等时可能会出现问题(当元素相互重叠时)。
    • 我不太明白你的问题,如果你在前一个项目上设置Margin="0,0,-5,0" 它应该更短并且仍然呈现,除非你设置剪辑。
    【解决方案2】:

    我对 H.B. 解决方案的问题是,我不能只绑定上边距。

    我使用这样的 XAML 来构建一种圆形进度条(一个椭圆,在顶部被裁剪):

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

    当我改变画布的高度时,椭圆的顶部会被裁剪(因为它与画布的底部对齐)。如果我将它与顶部对齐(默认),它将在底部被裁剪。

    我在一个圆形图标内使用这个结构来按比例填充它。

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2011-01-10
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2013-12-26
      相关资源
      最近更新 更多