我创建了一个非常简单的WPF窗口,其中包含一个网格,其中包含一个RichTextBox
和一个ComboBox
。我使用ComboBox
来更改并查找RichTextBox
选择的字体大小。通过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第一次印刷2008年7月提到,第135页,“制作按预期文本编辑工作”,项目9.我不明白的解释有创造一个说明具体问题的简短例子。
您发布的代码片段不会导致您提到的问题(至少在我的机器上)。所以这是导致问题的其他代码。另外,MyTextBox_SelectionChanged代码存在一个不同的问题。如果用户选择一个具有多种字体大小的文本(例如RichTex),它会抛出异常。 – publicgk
@publicgk:没有其他代码可以导致问题。有'MainWindow.xaml',它有一个名为'FontSize'的ComboBox,并且有一个名为'MyTextBox'的RichTextBox。而我所发布的是'MainWindow.xaml.cs'文件中除命名空间声明外的所有内容。它不会导致任何问题,因为这个问题在我正在阅读的书中提到。我无法理解这本书中的解释,所以这就是我在这里问的原因。 – hattenn
@publicgk:你提到的另一个问题不是问题,因为我专门写了这段代码来提到这个问题。这不是为了处理除此之外的其他任何情况。 – hattenn