我创建了一个非常简单的 WPF 窗口,其中包含一个 GridRichTextBox
和一个ComboBox
. 我使用ComboBox
更改和查找RichTextBox
选择的字体大小。
这是我的 XAML 的代码隐藏文件:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Add the font sizes.
for (var i = 1; i < 72; i++)
{
FontSize.Items.Add((double) i);
}
}
private void MyTextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
// If the selection changes, update the font size in the ComboBox.
FontSize.SelectedValue = (double) MyTextBox.Selection.GetPropertyValue(TextBlock.FontSizeProperty);
}
private void FontSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// If the selected size changes, change the size of the selection in the RichTextBox.
if (FontSize.SelectedItem != null)
MyTextBox.Selection.ApplyPropertyValue(TextBlock.FontSizeProperty, FontSize.SelectedItem);
}
}
这里有两件事:
MyTextBox_SelectionChanged
ComboBox
用所选内容的字体大小更新。FontSize_SelectionChanged
更改选择的字体大小。
您可以看到以下问题:
当我进行选择并更改字体大小时,它会完美地改变。但是当我点击另一个字体大小不同的文本时,它又变回来了。
是什么导致了这种行为?
编辑:这是 XAML 文件:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox x:Name="FontSize" HorizontalAlignment="Left" VerticalAlignment="Top" Width="497" Margin="10,10,0,0" SelectionChanged="FontSize_SelectionChanged"/>
<RichTextBox x:Name="MyTextBox" HorizontalAlignment="Left" Height="273" VerticalAlignment="Top" Width="497" Margin="10,37,0,0" RenderTransformOrigin="0.358,0.48" SelectionChanged="MyTextBox_SelectionChanged">
<FlowDocument>
<Paragraph>
<Run Text="RichTextBox"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
</Grid>
</Window>
编辑2:这是我在调试它时所做的简短解释:
- 有两个调试点,一个在
MyTextBox_SelectionChanged
,一个在FontSize_SelectionChanged
。 - 当我更改字体大小时,我单击 F5 并继续。
- 当我单击文本的另一部分(具有默认大小)时,
MyTextBox_SelectionChanged
会调用它。Selection.Text
是空的。 - 然后我再次继续并在调用 时停止
FontSize_SelectionChanged
。但仍然Selection.Text
是空的,但我的旧选择“丰富”返回到旧字体大小。
编辑 3:Sams Teach Yourself WPF in 24 Hours first printing 2008 年 7 月,第 135 页,“使文本编辑器按预期工作”,第 9 项中提到了这个问题。我不明白那里的解释并创建了一个简短的示例来说明那个具体的问题。