2011-07-15 6 views
3

XAMLで図面の一部として書式付きテキストをいくつか含めることを試みています。これは可能ですか?どうしたの?DrawingImage内の書式付きテキストを描画

例:

<DrawingImage> 
    <DrawingImage.Drawing> 
     <!-- Can text be drawn here? --> 
    </DrawingImage.Drawing> 
</DrawingImage> 

答えて

1

はい。 DrawingGroupの一部としてGlyphRunDrawingを使用するか、DrawingImageのソースであるDrawing自体として使用します。 XAMLでGlyphRunを構築するには、背後にあるコードでも可能であり、かつ:

Typeface typeface = new Typeface(FontFamily, FontStyle, FontWeight, FontStretches.Normal); 
if (!typeface.TryGetGlyphTypeface(out _glyphTypeface)) 
    return; 

_glyphIndexes = new ushort[text.Length]; 
_advanceWidths = new double[text.Length]; 

double textWidth = 0; 
for (int ix = 0; ix < text.Length; ix++) 
{ 
    ushort glyphIndex = _glyphTypeface.CharacterToGlyphMap[text[ix]]; 
    _glyphIndexes[ix] = glyphIndex; 

    double width = _glyphTypeface.AdvanceWidths[glyphIndex] * FontSize; 
    _advanceWidths[ix] = width; 

    textWidth += width; 
    double textHeight = _glyphTypeface.Height * FontSize; 
} 
+0

非常に役に立ちました。私はXAMLの例を見てきましたが、AdvanceWidthsとHeightの接続方法はわかりません。何か案は? –

+0

接続するとどういう意味ですか? –

+0

上記のコードビハインドでは、AdvanceWidthsとglyphIndiciesはforループに設定されています。私はXAMLでそれをどのように表現するのか分かりません。 –

4
<DrawingImage> 
    <DrawingImage.Drawing> 
     <GeometryDrawing> 
      <GeometryDrawing.Geometry> 
       <RectangleGeometry Rect="0,0,10,10"></RectangleGeometry> 
      </GeometryDrawing.Geometry> 
      <GeometryDrawing.Brush> 
       <VisualBrush> 
        <VisualBrush.Visual> 
         <StackPanel> 
          <TextBlock Text="Tyco" FontSize="16" FontWeight="999" Foreground="Black"></TextBlock> 
         </StackPanel> 
        </VisualBrush.Visual> 
       </VisualBrush> 
      </GeometryDrawing.Brush> 
     </GeometryDrawing> 
    </DrawingImage.Drawing> 
</DrawingImage> 
+0

しかし、テキストの伸びを避けるためにRectangleGeometryを正しく設定するにはどうすればよいですか? – SKINDER

+0

良い答え。私はこれがxamlでやるのに最適な解決策だと思います。ありがとう –

関連する問題