【问题标题】:Set font size of individual character in WPF TextBox设置 WPF TextBox 中单个字符的字体大小
【发布时间】:2014-01-02 14:34:00
【问题描述】:

我正在尝试制作一个动画,捕捉 TextChanged 事件并使新添加的字符从 fontsize 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);
        }
    }

【问题讨论】:

  • 您最好的选择可能是使用RichTextBox。您将能够操纵单个字符。

标签: c# wpf animation storyboard font-size


【解决方案1】:

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

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

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

这是 MSDN 上的一个很好的页面,介绍了 Glyphs 和 GlyphRuns,其中显示了一些代码示例:

Introduction to the GlyphRun Object and Glyphs Element


更新>>>

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

最后,我只是认为,如果您创建 chars 的集合并将它们显示在 ListBox 中,并使用自定义动画 StackPanel 并将 Orientation="Horizontal" 设置为 @,那么您可以做您想做的事情987654337@。您可以简单地为每个项目添加动画。以下是一些关于如何创建自定义动画面板的有用文章,从简单开始到变得更复杂:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多