0

myLabelサイズが 60x60のラベル (たとえば) があり、その背景を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));

3 行目のコメントを外すと、完全に機能します (ラベル内に 2 つの黒い四角が表示されます)。ただし、testGroupにジオメトリ オブジェクトが 1 つしか含まれていない場合は、myLabel全体が黒くなります。ブラシを変更しFillRuleたり、null 以外を指定したりしてPenも、結果には影響しません。

では、ラベルの背景として長方形を 1 つだけ描画するにはどうすればよいでしょうか。ありがとう〜

更新: より多くのソース コード

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]、最初のスニペットの元の目標でもある、それぞれに黒い四角が 1 つだけあることです。

更新 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;
}

生成されます:

ここに画像の説明を入力

長方形がラベルの中央に間違って配置されています。

4

1 に答える 1

1

作るだけ

   DrawingBrush.Stretch="None"
   DrawingBrush.ViewboxUnits="Absolute"
   DrawingBrush.Viewbox = new Rect(0,0,60,60);

または、この XAML を使用してすべてのラベルに適用します...

    <Style TargetType="{x:Type Label}">
       <Setter Property="Background">
          <Setter.Value>
             <DrawingBrush Stretch="None" ViewboxUnits="Absolute" >
                 <DrawingBrush.Viewbox>
                     <Rect X="0" Y="0" Height="60" Width="60"/>
                 </DrawingBrush.Viewbox>
                 <DrawingBrush.Drawing>
                   <DrawingGroup>
                     <GeometryDrawing Brush="Black">
                       <GeometryDrawing.Geometry>
                         <RectangleGeometry>
                           <RectangleGeometry.Rect>
                              <Rect X="20" Y="20" Width="10" Height="10"/>
                           </RectangleGeometry.Rect>
                         </RectangleGeometry>
                       </GeometryDrawing.Geometry>
                     </GeometryDrawing>
                     <!--<GeometryDrawing Brush="Black">
                       <GeometryDrawing.Geometry>
                         <RectangleGeometry>
                           <RectangleGeometry.Rect>
                             <Rect X="40" Y="40" Width="10" Height="10"/>
                           </RectangleGeometry.Rect>
                         </RectangleGeometry>
                       </GeometryDrawing.Geometry>
                     </GeometryDrawing>-->                                        
                 </DrawingGroup>
              </DrawingBrush.Drawing>
           </DrawingBrush> 
        </Setter.Value>
      </Setter>
    </Style>

お役に立てれば。

于 2011-10-11T11:12:58.757 に答える