WPF 怎么实现 图像拉伸 边角不拉伸 (求大神解答)

WPF 如何实现 图像拉伸 边角不拉伸 (求大神解答)
如题想实现 类似 android/ios 中的图像拉伸  取中间像素将图像拉伸使图像拉伸而不失真 而且边角没有发生变化

类似效果图:
图片发不上来 发个地址:http://blog.csdn.net/q199109106q/article/details/8615661
------解决方案--------------------
public class NineGridBorder : Border
    {

        public ImageSource Image
        {
            get { return (ImageSource) base.GetValue(ImageProperty); }
            set { base.SetValue(ImageProperty, value); }
        }


        public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("Image",
            typeof (ImageSource), typeof (NineGridBorder),
            new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));


        public Thickness ImageMargin
        {
            get { return (Thickness) GetValue(ImageMarginProperty); }
            set { SetValue(ImageMarginProperty, value); }
        }


        public static readonly DependencyProperty ImageMarginProperty =
            DependencyProperty.Register("ImageMargin", typeof (Thickness), typeof (NineGridBorder),
                new FrameworkPropertyMetadata(new Thickness(), FrameworkPropertyMetadataOptions.AffectsRender));




        public double ImageOpacity
        {
            get { return (double) GetValue(ImageOpacityProperty); }
            set { SetValue(ImageOpacityProperty, value); }
        }

        public static readonly DependencyProperty ImageOpacityProperty =
            DependencyProperty.Register("ImageOpacity", typeof (double), typeof (NineGridBorder),
                new FrameworkPropertyMetadata(1D, FrameworkPropertyMetadataOptions.AffectsRender));



        private bool IsNineGrid
        {
            get { return !ImageMargin.Equals(new Thickness()); }
        }




        protected override void OnRender(DrawingContext dc)
        {
            DrawImage(dc, new Rect(0, 0, RenderSize.Width, RenderSize.Height));
        }

        private void DrawImage(DrawingContext dc, Rect rect)
        {
            ImageSource source = Image;

            if (source != null)
            {
                double opacity = ImageOpacity;

                if (IsNineGrid)
                {

                    Thickness margin = Clamp(ImageMargin, new Size(source.Width, source.Height), rect.Size);

                    double[] xGuidelines = {0, margin.Left, rect.Width - margin.Right, rect.Width};
                    double[] yGuidelines = {0, margin.Top, rect.Height - margin.Bottom, rect.Height};
                    GuidelineSet guidelineSet = new GuidelineSet(xGuidelines, yGuidelines);