の幅を調整する方法はありますか?文字をWPF textBlockまたはGlyphRun要素に挿入しますか?文字幅を設定する
私は、文字間のスペースを増やしたくありませんが、絵のように文字そのものの幅を大きくする:
画面上に以下のコードを印刷文字「ABC abc '、どうすればいいですかの文字数は200%または300%ですか?
私が思う<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="300">
<Grid>
<Image Stretch="None" SnapsToDevicePixels="True">
<Image.Source>
<DrawingImage x:Name="drawingImage" />
</Image.Source>
</Image>
</Grid>
</Window>
public partial class MainWindow : Window
{
GlyphTypeface glyphTypeface;
double renderingEmSize, advanceWidth, advanceHeight;
Point baselineOrigin;
public MainWindow()
{
InitializeComponent();
new Typeface("segoe ui").TryGetGlyphTypeface(out glyphTypeface);
renderingEmSize = 12;
advanceWidth = glyphTypeface.AdvanceWidths[0] * renderingEmSize;
advanceHeight = glyphTypeface.Height * renderingEmSize;
baselineOrigin = new Point(0, glyphTypeface.Baseline * renderingEmSize);
drawingImage.Drawing = Render();
}
private Drawing Render()
{
var line = "ABC abc";
var drawing = new DrawingGroup();
using (var drawingContext = drawing.Open())
{
var glyphRun = ConvertTextToGlyphRun(
glyphTypeface, renderingEmSize,
advanceWidth, advanceHeight,
baselineOrigin, line);
var guidelines = new GuidelineSet();
guidelines.GuidelinesX.Add(baselineOrigin.X);
guidelines.GuidelinesY.Add(baselineOrigin.Y);
drawingContext.PushGuidelineSet(guidelines);
drawingContext.DrawGlyphRun(Brushes.Black, glyphRun);
drawingContext.Pop();
}
return drawing;
}
static GlyphRun ConvertTextToGlyphRun(
GlyphTypeface glyphTypeface,
double renderingEmSize,
double advanceWidth,
double advanceHeight,
Point baselineOrigin,
string line)
{
var glyphIndices = new List<ushort>();
var advanceWidths = new List<double>();
var glyphOffsets = new List<Point>();
var y = baselineOrigin.Y;
var x = baselineOrigin.X;
for (int j = 0; j < line.Length; ++j)
{
var glyphIndex = glyphTypeface.CharacterToGlyphMap[line[j]];
glyphIndices.Add(glyphIndex);
advanceWidths.Add(0);
glyphOffsets.Add(new Point(x, y));
x += glyphTypeface.AdvanceWidths[glyphIndex] * renderingEmSize;
}
return new GlyphRun(
glyphTypeface,
0,
false,
renderingEmSize,
glyphIndices,
baselineOrigin,
advanceWidths,
glyphOffsets,
null, null, null, null, null);
}
}
[WPF TextBoxで文字間隔やカーニングを指定するにはどうすればよいですか?](https://stackoverflow.com/questions/5843562/how-can-i-specify-letter-spacing-or-kerning) -in-a-wpf-textbox) – David
重複しない文字間のスペースを増やしたいのではなく、文字自体の幅を広げたい –
@DavidDayこれはまったく逆です。 「文字間の間隔を変更する」方法を尋ねる一方で、質問者は「文字間のスペースを広げたくない」と質問しています。 – Clemens