我創建了一個非常簡單的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