WPF中使用 RichTextBox 的时候,遇到的中文输入问题.

sunfish_iris 2008-05-15 03:47:06
最近做了一个类似文本编辑器的东西.
就是使用WPF的RichTextBox来存放输入的文章,在程序的其他地方可以设置字体,字号,加粗,斜体等字体样式.
字体 是使用的下拉框,程序加载的过程中,把系统的中英文字体一起加载过来.

问题出现在这里,输入一段汉字,没有问题,随后我更换了一种字体,继续输入汉字,发现字体没有改变.
后来做了一个实验,如果输入一段字母,也没有问题,然后更改字体,继续输入字母,仍然没有问题.
再后来,输入一段汉字,更换字体,然后输入一个空格或者字母,再输入汉字,字体改过来了.
很郁闷,不知道为什么正常情况下没有更改过来字体.

使用的是: RichTextBox1.Selection.ApplyPropertyValue(FlowDocument.FontFamilyProperty, FontFamily1);来修改的字体.

是不是有其他更好的方式 ?
程序有点儿大,放不上来.
请高手赐教啊.................
...全文
541 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gumpami 2010-04-06
  • 打赏
  • 举报
回复
想看看
sunfish_iris 2008-05-27
  • 打赏
  • 举报
回复
OK,我试一下.
一会儿看结果.

还有,我把这个RichTextBox 换成 WinFrom里的RichTextBox之后,我发现中文的切换没有问题了,切换中文后,输入字母,字母的字体没有改变.我欲哭无泪啊.
sunfish_iris 2008-05-27
  • 打赏
  • 举报
回复
在文字后面强制添加一个空格,可以迫使字体改变过来,可是如果手动把空格删去,字体还是会变回去.
而且多次切换字体,会增加过多的空格.
就算迫使程序只加一个多余的空格,还是感觉很是别扭.
好像不是解决问题的正确做法,暂不说最优做法了.
财富实验室 2008-05-26
  • 打赏
  • 举报
回复
niu
zhouyongh 2008-05-24
  • 打赏
  • 举报
回复
再现了你的问题,这个应该是Selection的问题,Selection为IsEmpty。
而且把光标设置到中间选择字体会更改所有的字体。

你可以设置
if (richTextBox1.Selection.IsEmpty)
{
richTextBox1.Selection.Text = "日";
richTextBox1.Selection.ApplyPropertyValue(FlowDocument.FontFamilyProperty, family);
然后再Remove掉

或者使用Span span裁剪区域

你可以去MSDN WPF Forum上汇报这个问题,我觉得应该是个Bug

Hope this helps
Yohan Zhou

sunfish_iris 2008-05-22
  • 打赏
  • 举报
回复
示例代码:
Window1.axml

<Window x:Class="RichTextBoxTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="423" Width="615" Loaded="Window_Loaded">
<Grid>
<ComboBox Height="23" HorizontalAlignment="Left" Margin="20,20,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" />
<RichTextBox Margin="20,50,20,20" Name="richTextBox1" />
</Grid>
</Window>

Window.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Markup;

namespace RichTextBoxTest
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();

}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
ComboBoxItem fontItem;
XmlLanguage xamlCN = XmlLanguage.GetLanguage("zh-CN");

foreach (FontFamily fontFamily in Fonts.SystemFontFamilies)
{
fontItem = new ComboBoxItem();
fontItem.Content = fontFamily.FamilyNames[xamlCN];
if (fontItem.Content != null)
{
comboBox1.Items.Add(fontItem);
}
}

comboBox1.SelectedIndex = 0;
comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);

richTextBox1.FontSize = 48d;
}

void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBoxItem comboBoxItem = (ComboBoxItem)comboBox1.SelectedItem;

FontFamily family = new FontFamily(comboBoxItem.Content.ToString());

richTextBox1.Selection.ApplyPropertyValue(FlowDocument.FontFamilyProperty, family);

richTextBox1.Focus();
}
}
}
sunfish_iris 2008-05-15
  • 打赏
  • 举报
回复
帮帮忙吧.
我已经走访了好多搜索引擎,看过了好多博客,连MSDN都使劲儿看了看.
找不到原因啊.
痛苦.

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧