是否有一种方法可以将普通的Rectangle(形状)用作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'类型的方法,但我对上面提到的代码方面的解决方案更感兴趣。
答案 0 :(得分:10)
尝试Shape.RenderedGeometry Property。
<Rectangle Width="100" Height="100"
Clip="{Binding ElementName=ClipRect, Path=RenderedGeometry}" />
答案 1 :(得分:1)
ClipRect.DefiningGeometry
和ClipRect.RenderedGeometry
仅包含RadiusX
和RadiusY
值,但不包含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>