给image添加clip(剪切)对象—rectanglegeometry
所以实则给rectanglegeometry添加圆角,这个很容易radiusX,和radiusY,可是给这个矩形几何对象添加rect就有意思了,需要这个矩形的大小等于image的大小,所以需要用到绑定了
<Image x:Name="image" Stretch="Fill" Margin="10">
<Image.Clip>
<RectangleGeometry RadiusX="5" RadiusY="5">
<RectangleGeometry.Rect>
<MultiBinding Converter="{StaticResource rect}">
<Binding ElementName="image"></Binding>
</MultiBinding>
</RectangleGeometry.Rect>
</RectangleGeometry>
</Image.Clip>
<Image.Source>
<ImageSource>Resources/bj.jpg</ImageSource>
</Image.Source>
</Image>
下面为实现接口代码
class MultiBindingConverter : System.Windows.Data.IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
Image image = values[0] as Image;
System.Windows.Size size = image.RenderSize;
double x = size.Width;
double y = size.Height;
return new System.Windows.Rect(0, 0, x, y);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
可以看到用到是多数据绑定,并没有使用普通数据绑定,但是此例子只添加了一个绑定对象 所以用普通数据绑定应该也可以,只要在普通绑定里面添加path为image的RenderSize属性即可
今天学习到两点
普通绑定似乎在用控件为源时,必须指明path,但是multibinding可以不需要,它可以直接传递源本身为参数
<RectangleGeometry.Rect>0,0,100,100</RectangleGeometry.Rect> 这个0,0,100,100写在xaml虽然呈现出字符串,但是如果多值转换器给的是字符串,没有作用,绑定返回的值应该为System.Windows.Rect(0, 0, x, y);
记得new 一下哟。