2013-12-15 86 views
0

我正在尝试制作一个动画,其中我抓住TextChanged事件并使新添加的字符从字体大小0淡出到由我设置的大小。设置WPF文本框中单个字符的字体大小

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

这是我的代码:

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); 
     } 
    } 
+0

您最好的选择可能是使用了'RichTextBox'。你将能够操纵个人角色。 –

回答

2

你不能有控制权的使用标准文本控件在WPF的文字水平。您需要深入探索Glyphs and GlyphRuns的深层世界。使用这个最低级别的功能,您可以完全控制显示的每个字符。从链接页面:

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

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

这里是MSDN一个很好的网页介绍Glyph S和GlyphRun S的显示了一些代码示例:

Introduction to the GlyphRun Object and Glyphs Element


UPDATE >>>

另一种方法,你本来可以用来增加文字大小的部分将会在内操纵Run元素,但我认为它不适用于文本输入。查看StackOverflow上的WPF How to arrange TextBlock with different Fontsize at bottomline这篇文章(仅适用于文本输出)。

最后,我只是想,你可以做你想做的,如果你创建的char个集合并ListBoxOrientation="Horizontal"设定为ListBox.ItemsPanel动画StackPanel自定义显示它们。您可以简单地为每个项目添加动画。下面是一些关于如何创建自定义动画面板,简单地启动和越来越复杂有用的文章:

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

相关问题