2013-01-11 114 views
1

在WPF用户控件中,我试图用一个可以在位置和大小上有所不同的圆圈蒙版图像控件。用户左拖动改变圆的半径,右拖动改变椭圆的中心点。我正确捕获所有需要的值,并可以正确设置蒙版的半径。问题是,无论我用什么点来使用椭圆的中心,它都是从图像控件的中心绘制的。有任何想法吗?在WPF中定位不透明蒙板

下面是设置屏蔽代码:

private void SetMask(double _Radius) 
{ 
     EllipseGeometry MaskGeometry = new EllipseGeometry(CenterPos, _Radius, _Radius); 
     GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.Black, null, MaskGeometry); 
     DrawingBrush MaskBrush = new DrawingBrush(MaskDrawing); 
     MaskBrush.Stretch = Stretch.None; 
     Img.OpacityMask = MaskBrush; //Img is the Image control 
} 

回答

2

您还可以设置ViewboxUnitsAlignmentXAlignmentY性质:

private void SetMask(double radius) 
{ 
    var maskGeometry = new EllipseGeometry(CenterPos, radius, radius); 
    var maskDrawing = new GeometryDrawing(Brushes.Black, null, maskGeometry); 
    var maskBrush = new DrawingBrush 
    { 
     Drawing = maskDrawing, 
     Stretch = Stretch.None, 
     ViewboxUnits = BrushMappingMode.Absolute, 
     AlignmentX = AlignmentX.Left, 
     AlignmentY = AlignmentY.Top 
    }; 

    Img.OpacityMask = maskBrush; 
} 
+0

好的......谢谢!修复它! – magnvs

0

您需要修改ViewportViewportUnits财产您的DrawingBrush瓷砖:

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     EllipseGeometry MaskGeometry = new EllipseGeometry(CenterPos, _RadiusX, _RadiusY); 
     GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.Black, null, MaskGeometry); 
     DrawingBrush MaskBrush = new DrawingBrush(MaskDrawing); 
     MaskBrush.Stretch = Stretch.None; 
     MaskBrush.ViewportUnits = BrushMappingMode.Absolute; 
     MaskBrush.Viewport = MaskGeometry.Bounds; 
     Img.OpacityMask = MaskBrush; //Img is the Image control 

    } 

MSDN文档here给出了如何使用TileBrush绘制控件的一个很好的解释。