关于更改字体大小的问题

Hui Liu-MSFT 46,961 信誉分 Microsoft 供应商
2024-05-23T08:57:21.6633333+00:00

大家好,我的WPF应用程序中有一个小错误,这让我很烦恼。我正在我的 richtextbox 中更改文本的字体大小,奇怪的是,有时它有效,有时无效,

这很奇怪,我在想有人会知道为什么?

这是控制该代码的部分


private void NoteContent_SelectionChanged(object sender, RoutedEventArgs e) {



        var selectionFontWeight = NoteContent.Selection.GetPropertyValue(TextElement.FontWeightProperty);  
        boldBton.IsChecked = (selectionFontWeight != DependencyProperty.UnsetValue)  
            && selectionFontWeight.Equals(FontWeights.Bold);  

        var selectionFontStyle = NoteContent.Selection.GetPropertyValue(TextElement.FontStyleProperty);  
        italicBton.IsChecked = (selectionFontStyle != DependencyProperty.UnsetValue)  
            && selectionFontStyle.Equals(FontStyles.Italic);  

        var selectionFontDecoration = NoteContent.Selection.GetPropertyValue(Inline.TextDecorationsProperty);  
        UndelineBton.IsChecked = (selectionFontDecoration != DependencyProperty.UnsetValue)  
            && selectionFontDecoration.Equals(TextDecorations.Underline);  

        FontsComboBox.SelectedItem = NoteContent.Selection.GetPropertyValue(FontFamilyProperty);  
        SizeConboBox.Text = (NoteContent.Selection.GetPropertyValue(FontSizeProperty)).ToString();  
    }  

    private void FontsComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) {  
        if (FontsComboBox.SelectedItem != null) {  
            NoteContent.Selection.ApplyPropertyValue(FontFamilyProperty, FontsComboBox.SelectedItem);  
        }  
    }  

    private void SizeConboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) {  
        NoteContent.Selection.ApplyPropertyValue(FontSizeProperty, SizeConboBox.Text);  
    }  

另一件值得一提的事情是,如果我将我的字体系列更改为“Arial”,它会正常工作,但其余的则不行,或者有时我必须更改两次才能看到效果

105092-font-size-changed.jpg

Note:此问题总结整理于:Change font size

Windows Presentation Foundation
Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
170 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 41,426 信誉分 Microsoft 供应商
    2024-05-23T09:08:50.1366667+00:00

    请尝试以下代码来更改您的 FontSize: Xaml 代码为:

     <RichTextBox Name="rtf" Width="200" Height="200" SelectionChanged="rtf_SelectionChanged" >  
                <FlowDocument>  
                    <Paragraph>  
                        <Run>Paragraph 1</Run>  
                    </Paragraph>  
                    <Paragraph>  
                        <Run>Paragraph 2</Run>  
                    </Paragraph>  
                    <Paragraph>  
                        <Run>Paragraph 3</Run>  
                    </Paragraph>  
                </FlowDocument>  
            </RichTextBox>  
            <WrapPanel VerticalAlignment="Center" Width="100">  
                <ComboBox x:Name="FontSizeCombo" Height="23" Width="40" Margin="5,2,5,2" IsEditable="True" SelectionChanged="OnFontSizeComboSelectionChanged">  
                </ComboBox>  
            </WrapPanel>  
    

    C# 代码为:

    public partial class MainWindow : Window  
        {  
            public MainWindow()  
            {  
                InitializeComponent();  
                Initialize();  
            }  
            private void Initialize()  
            {  
                FontSizeCombo.Items.Add("10");  
                FontSizeCombo.Items.Add("12");  
                FontSizeCombo.Items.Add("14");  
                FontSizeCombo.Items.Add("18");  
                FontSizeCombo.Items.Add("24");  
                FontSizeCombo.Items.Add("36");  
            }  
      
            private void OnFontSizeComboSelectionChanged(object sender, SelectionChangedEventArgs e)  
            {  
                if (FontSizeCombo.SelectedItem == null) return;  
      
                if (FontSizeCombo.SelectedItem.ToString() == "{DependencyProperty.UnsetValue}")  
                {  
                    FontSizeCombo.SelectedItem = null;  
                    return;  
                }  
      
                var pointSize = FontSizeCombo.SelectedItem.ToString();  
                var pixelSize = Convert.ToDouble(pointSize) * (96 / 72);  
                var textRange = new TextRange(rtf.Selection.Start, rtf.Selection.End);  
                textRange.ApplyPropertyValue(TextElement.FontSizeProperty, pixelSize);  
            }  
      
            private void rtf_SelectionChanged(object sender, RoutedEventArgs e)  
            {  
                var textRange = new TextRange(rtf.Selection.Start, rtf.Selection.End);  
                var fontSize = textRange.GetPropertyValue(TextElement.FontSizeProperty);  
                FontSizeCombo.Text = fontSize.ToString();  
            }  
        }  
    

    结果图片为: 105301-3.gif


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助