如何在Silverlight中创建可伸展的裁剪矩形

3

Silverlight没有控件上“ClipToBounds”属性的优势,因此我必须自己定义剪切形状。我想知道是否可以创建一个跟随我的控件大小的剪切矩形。有什么建议吗?

2个回答

3

如果您的布局中有一个现有的控件需动态剪切,则应使用其SizeChanged事件。例如,假设您想要剪辑此网格:-

    <Grid SizeChanged="Grid_SizeChanged" Width="50" Height="20">
        <Grid.Clip>
            <RectangleGeometry />
        </Grid.Clip>
        <TextBlock Margin="0 -9 0 0" Text="This text should not be legible" />
    </Grid>

使用代码后端:

使用代码后端:

   private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        ((RectangleGeometry)((Grid)sender).Clip).Rect = new Rect(0.0, 0.0, e.NewSize.Width, e.NewSize.Height);
    }  

如果您要创建自定义控件,建议在ArrangeOverride方法中处理剪辑矩形,而不是依赖于SizeChanged事件。在这种情况下,您可能需要在代码中将Clip属性分配给RectangleGeometry,而不是依赖于默认模板的Xaml中分配它。


我为FrameworkElement创建了一个行为,它可以实现你所描述的功能。现在我在Silverlight中有ClipToBounds了! :) 这正是我一直在寻找的!谢谢! - Tenshiko

0
Silverlight支持以下操作: 尝试使用HorizontalAlignment和VerticalAlignment属性。将它们设置为Stretch。 如果这不起作用,那么您将需要发布XAML示例。

对齐属性不会影响控件的剪辑区域。 - AnthonyWJones
如果父级控件是三角形的形状,ClipToBounds属性是否有效?如果您的父级控件始终是矩形,则应该使用对齐属性。 - Sonosar
你似乎对WPF的ClipToBounds属性的实际作用感到相当困惑。它的功能是关于裁剪而不是大小或对齐。对齐属性与此问题完全无关。 - AnthonyWJones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接