在WPF TextBox中设置单个字符的字体大小

时间:2013-12-15 00:37:33

标签: c# wpf animation storyboard font-size

我正在尝试制作一个动画,我抓住TextChanged事件并让新添加的字符从我的字体大小0变为设定大小。

我有动画工作,但是,当我输入一个新角色时,文本框的整个内容随之改变,但我只想要按下的键。

这是我的代码:

private void CreateTextboxAnimation(TextBox box)
    {
        // Info Needed By Control
        double FontSize = box.FontSize;
        //
        DoubleAnimation Anim = new DoubleAnimation();
        Anim.From = 0.0;
        Anim.To = FontSize;
        Anim.Duration = new Duration(TimeSpan.FromMilliseconds(100));
        Anim.AutoReverse = false;
        SB = new Storyboard();
        SB.Children.Add(Anim);
        Storyboard.SetTargetName(Anim, box.Name);
        Storyboard.SetTargetProperty(Anim, new PropertyPath(TextBox.FontSizeProperty));

    }
    private Storyboard SB;

    private void TestBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (TestBox.IsLoaded == true)
        {
            SB.Begin(TestBox);
        }
    }

1 个答案:

答案 0 :(得分:2)

您无法使用WPF中的标准文本控件对文本进行该级别的控制。您将需要深入研究Glyphs and GlyphRuns的深层世界。使用此最低级别的功能,您可以完全控制显示的每个字符。从链接页面:

  

字形是给定字体中字符的物理表示。字符可能有许多字形,系统上的每个字体都可能为该字符定义不同的字形。

     

字形运行表示一组连续的字形,这些字形都具有相同的字体和大小,以及相同的客户端绘制效果(如果有)。

以下是MSDN上介绍GlyphGlyphRun的一个很好的页面,其中显示了一些代码示例:

Introduction to the GlyphRun Object and Glyphs Element


更新>>>

您可能用来增加部分文本大小的另一种方法是操纵Run中的TextBox个元素,但我认为它不会起作用文字输入。请查看StackOverflow上的WPF How to arrange TextBlock with different Fontsize at bottomline帖子,以获取该示例(仅用于文本输出)。

最后,我只是认为如果您创建char的集合并在ListBox中使用自定义动画StackPanel并{ {1}}设置为Orientation="Horizontal"。您可以简单地为每个项目添加动画。以下是一些有关如何创建自定义动画面板的有用文章,从简单开始并变得更复杂:

How to create a Custom Layout Panel in WPF
Creating a sliding panel in WPF
Animated WPF Panels