У меня есть ярлык (скажем, myLabel
) размером 60х60, и я хочу установить его фон на DrawingBrush
. Мой код:
GeometryGroup testGroup = new GeometryGroup();
testGroup.Children.Add(new RectangleGeometry(new Rect(20, 20, 10, 10)));
//testGroup.Children.Add(new RectangleGeometry(new Rect(40, 40, 10, 10)));
myLabel.Background=new DrawingBrush(
new GeometryDrawing(Brushes.Black, null, testGroup));
Если я раскомментирую третью строку, она отлично работает (с двумя черными квадратами внутри метки) Но если testGroup
содержит только один геометрический объект, myLabel
будет полностью черным. Изменение FillRule
или присвоение кисти ненулевого значения Pen
не влияет на результат.
Итак, как я могу нарисовать только один прямоугольник в качестве фона метки? Спасибо ~
ОБНОВЛЕНИЕ : больше исходного кода
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
GeometryGroup testGroup = new GeometryGroup();
testGroup.Children.Add(new RectangleGeometry(new Rect(20, 20, 10, 10)));
labelArray[i, j].Background =
new DrawingBrush(
new GeometryDrawing(
Brushes.Black, null, testGroup));
}
}
сгенерирует:
, а
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
GeometryGroup testGroup = new GeometryGroup();
testGroup.Children.Add(new RectangleGeometry(new Rect(20, 20, 10, 10)));
testGroup.Children.Add(new RectangleGeometry(new Rect(40, 40, 10, 10)));
labelArray[i, j].Background =
new DrawingBrush(
new GeometryDrawing(
Brushes.Black, null, testGroup));
}
}
сгенерирует:
Я хочу, чтобы в каждом labelArray[i, j]
был только один черный квадрат, что также является первоначальной целью первого фрагмента.
ОБНОВЛЕНИЕ 2 : Спасибо за предложение @ AngelWPF:
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
GeometryGroup testGroup = new GeometryGroup();
testGroup.Children.Add(new RectangleGeometry(new Rect(-10, -10, 10, 10)));
testGroup.Children.Add(new RectangleGeometry(new Rect(10, 10, 10, 10)));
DrawingBrush brush = new DrawingBrush(
new GeometryDrawing(Brushes.Black, null, testGroup));
brush.Stretch = Stretch.None;
labelArray[i, j].Background = brush;
}
правильно генерирует:
Но
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
GeometryGroup testGroup = new GeometryGroup();
testGroup.Children.Add(new RectangleGeometry(new Rect(20, 20, 10, 10)));
DrawingBrush brush = new DrawingBrush(
new GeometryDrawing(Brushes.Black, null, testGroup));
brush.Stretch = Stretch.None;
labelArray[i, j].Background = brush;
}
сгенерирует:
, где прямоугольники неправильно размещены в центре этикетки.