我得到Canvas
和Rectangles
个width
但height
相同的Rectangles
。
我在Canvas
pragramticaly上绘制width
,Rectangles
在绘制时实时计算。
部分SolidColorBrush
有private static Brush CreateBrush()
{
// Create a DrawingBrush
var blackBrush = new DrawingBrush();
// Create a Geometry with white background
// Create a GeometryGroup that will be added to Geometry
var gGroup = new GeometryGroup();
gGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 10, 10)));
gGroup.Children.Add(new RectangleGeometry(new Rect(10, 10, 10, 10)));
// Create a GeomertyDrawing
var checkers =
new GeometryDrawing(new SolidColorBrush(Colors.Black), null, gGroup);
var checkersDrawingGroup = new DrawingGroup();
checkersDrawingGroup.Children.Add(checkers);
blackBrush.Drawing = checkersDrawingGroup;
// Set Viewport and TileMode
blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 );
blackBrush.TileMode = TileMode.Tile;
return blackBrush;
}
,但休息看起来应该像棋盘:
我试着这样做:
Rectangles
就Rectangles
大小不同而言,同一个DrawingBrush在不同的blackBrush.Viewport = new Rect(0, 0, 0.5, 0.5 );
上看起来不同 - 它不是重复填充它,而是拉伸。
据我了解,问题出在Viewports
- 我应该根据每个Rectangle
width
设置不同的Rectangle
,但这对我来说是不可接受的。我需要为所有不同大小的矩形使用一个画笔,纹理应该看起来像一张图片 - X和Y的比例相同,但它可以在一个{{1}}中重复多次
也许有另一种刷子类型或其他方式来解决这个问题?
随意询问,如果我的帖子不清楚,也对我的英语感到抱歉。
为我需要的内容添加图片: (它不是关于宽度,关于纹理填充)
答案 0 :(得分:2)
问题出在Viewport
设置中,您应该将其ViewportUnits
设置为Absolute
而不是RelativeToBoundingBox
(默认情况下):
//we have to use a fixed size for the squares
blackBrush.Viewport = new Rect(0, 0, 60, 60);
blackBrush.Viewport.ViewportUnits = BrushMappingMode.Absolute;
以下示例显示了使用纯XAML的检查板:
<Grid>
<Grid.Background>
<DrawingBrush TileMode="Tile" Viewport="0,0,60,60"
ViewportUnits="Absolute">
<DrawingBrush.Drawing>
<GeometryDrawing Brush="Black"
Geometry="M5,5 L0,5 0,10 5,10 5,5 10,5 10,0 5,0 Z"/>
</DrawingBrush.Drawing>
</DrawingBrush>
</Grid.Background>
</Grid>
答案 1 :(得分:0)
通过使用具有King King答案的DrawingGroup,您可以为每一方指定不同的颜色:
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="Black" Geometry="M5,5 L0,5 0,10 5,10 5,5 10,5 10,0 5,0 Z"/>
<GeometryDrawing Brush="Blue" Geometry="M0,0 L0,5 0,10 0,5, 10,5 10,10 5,10 5,0 Z"/>
</DrawingGroup>
</DrawingBrush.Drawing>