剪切具有CornerRadius的RectangleGeometry(可能在Ripple中用到)

剪切具有CornerRadius的RectangleGeometry(可能在Ripple中用到)

1、新建Converter

public class BorderClipConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values.Length == 3 && values[0] is double && values[1] is double && values[2] is CornerRadius)
        {
            var width = (double)values[0];
            var height = (double)values[1];

            if (width < Double.Epsilon || height < Double.Epsilon)
            {
                return Geometry.Empty;
            }

            var radius = (CornerRadius)values[2];

             var clip = new System.Windows.Media.RectangleGeometry(new Rect(0, 0, width, height), radius.TopLeft, radius.TopLeft);
            clip.Freeze();

            return clip;
        }

        return DependencyProperty.UnsetValue;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
} 

2、添加Converter

<controls:Ripple.Clip>
                                <MultiBinding Converter="{StaticResource BorderClipConverter}">
                                    <Binding Path="ActualWidth" ElementName="border" />
                                    <Binding Path="ActualHeight" ElementName="border" />
                                    <Binding Path="CornerRadius" ElementName="border" />
                                </MultiBinding>
                            </controls:Ripple.Clip>

 

 
posted @ 2017-09-08 10:36  akiing  阅读(349)  评论(0编辑  收藏  举报