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 Propertyを試してください。

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

ClipRect.DefiningGeometryndにはとの値ClipRect.RenderedGeometryのみが含まれますが、 も含まれません。RadiusXRadiusYRect

あなたが何を達成したいのか正確にはわかりませんが(あなたのサンプルからは明確ではありません)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 に答える