5

有没有一种方法可以将普通矩形(形状)用作 XAML 中另一个对象的剪辑的一部分。似乎我应该能够,但解决方案正在逃避我..

<Canvas>

        <Rectangle Name="ClipRect" RadiusY="10" RadiusX="10" Stroke="Black" StrokeThickness="0" Width="32.4" Height="164"/>

<!-- This is the part that I cant quite figure out.... -->
<Rectangle Width="100" Height="100" Clip={Binding ElementName=ClipRect, Path="??"/>

</Canvas>

我知道我可以使用“RectangleGeometry”类型的方法,但我对上面提供的代码的解决方案更感兴趣。

4

2 回答 2

10

尝试Shape.RenderedGeometry 属性

<Rectangle Width="100" Height="100"
           Clip="{Binding ElementName=ClipRect, Path=RenderedGeometry}" />
于 2012-04-09T15:58:37.387 回答
1

ClipRect.DefiningGeometryndClipRect.RenderedGeometry仅包含RadiusXandRadiusY值,但不包含 also Rect

我不确定您到底想要达到什么目标(我从您的示例中不清楚),但您可以编写一个IValueConverter从引用中提取您需要的信息的代码Rectangle

public class RectangleToGeometryConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var rect = value as Rectangle;

        if (rect == null || targetType != typeof(Geometry))
        {
            return null;
        }

        return new RectangleGeometry(new Rect(new Size(rect.Width, rect.Height)))
        { 
            RadiusX = rect.RadiusX, 
            RadiusY = rect.RadiusY 
        };
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后,您将在绑定定义中使用此转换器:

<Rectangle Width="100" Height="100" 
            Clip="{Binding ElementName=ClipRect, Converter={StaticResource RectangleToGeometryConverter}}">

当然,您需要先将转换器添加到您的资源中:

<Window.Resources>
    <local:RectangleToGeometryConverter x:Key="RectangleToGeometryConverter" />
</Window.Resources>
于 2012-04-09T15:39:28.347 回答