0

定規コントロールを作成していて、その下にスケールを描画したいと考えています。残念ながら、WPF の DrawingContext.DrawText メソッドは (呼び出されますが) 何も描画しません。誰かが同じ問題を抱えていて、解決策を知っていますか? これは、テキストがレンダリングされるコードの一部です。

protected void RenderRulerScale(DrawingContext drawingContext)
{
    int value = 0;
    for (double x =  this.LargeUnit * (this.ActualWidth / this.Maximum);
        x < this.ActualWidth; x += this.LargeUnit * (this.ActualWidth / this.Maximum))
    {
        string unitString = (++value).ToString() + this.UnitName;
        FormattedText formattedUnitString = new FormattedText(unitString,
            new CultureInfo("en-US"), FlowDirection.LeftToRight,
            new Typeface("Arial"), 5.0, Brushes.Black)
            {
                TextAlignment = TextAlignment.Center,
                MaxTextWidth = 2 * this.LargeUnit,
                MaxTextHeight = 25.0
            };
        drawingContext.DrawText(formattedUnitString, new Point(x, (2.0 / 3.0) *
            this.ActualHeight));
    }
}

このメソッドは OnRender メソッドで呼び出されます。

protected override void OnRender(DrawingContext drawingContext)
{
    base.OnRender(drawingContext);
    this.RenderRulerScale(drawingContext);
}
4

1 に答える 1

0

私はついに解決策を見つけました!問題はテキストの配置だったと思います。私はそれを左に戻しました、そしてそれはちょうどうまくいきました。コードは次のとおりです。

int value = 0;
for (double x = this.LargeUnit * (this.ActualWidth / this.Maximum);
    x < this.ActualWidth; x += this.LargeUnit * (this.ActualWidth / this.Maximum))
{
    string unitString = (++value).ToString() + this.UnitName;
    FormattedText formattedUnitString = new FormattedText(unitString,
        Thread.CurrentThread.CurrentUICulture, FlowDirection.LeftToRight,
        new Typeface(new FontFamily("Arial"), FontStyles.Normal, FontWeights.Normal,
        FontStretches.Normal) , 10.0, Brushes.Black);
    drawingContext.DrawText(formattedUnitString,
        new Point(x - (formattedUnitString.Width / 2.0), (2.0 / 3.0) *
        this.ActualHeight));
}
于 2012-05-30T09:39:30.827 に答える