在WPF中将值设置为FontDialog

在WPF中将值设置为FontDialog,wpf,fonts,edit,Wpf,Fonts,Edit,我正在用文本处理WPF。现在我想使用FontDialog编辑文本,但我无法将当前文本样式设置为FontDialog,因此每次调用FontDialog时文本样式都会更改。你们能帮帮我吗 这是我的代码: System.Windows.Forms.FontDialog fontDialog = new System.Windows.Forms.FontDialog(); if (fontDialog.ShowDialog() == System.Windows.Forms.Dialog

我正在用文本处理WPF。现在我想使用FontDialog编辑文本,但我无法将当前文本样式设置为FontDialog,因此每次调用FontDialog时文本样式都会更改。你们能帮帮我吗

这是我的代码:

System.Windows.Forms.FontDialog fontDialog = new System.Windows.Forms.FontDialog();
        if (fontDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            this.textAnnotation.Font.Size = fontDialog.Font.Size;
            this.textAnnotation.Font.Name = fontDialog.Font.Name;
            this.textAnnotation.Font.Underline = fontDialog.Font.Underline;
            this.textAnnotation.Font.Strikeout = fontDialog.Font.Strikeout;
            this.textAnnotation.Font.Bold = fontDialog.Font.Bold;
            this.textAnnotation.Font.Italic = fontDialog.Font.Italic;
        }

WPF中的字体对象与FontDialog返回的Windows窗体中的字体对象不同

  • Fontsize不会出错,但WPF字体大小与WinForms不同
  • 您需要使用设置字体名称
  • 下划线和删除线是WPF中的文本装饰
  • 对于字体样式和字体重量属性,可以使用条件逻辑设置属性
  • 由于字体对象是不同的,所以最好使用Wpf自带的东西。在Wpf文本博客上有一个链接。我建议你调查一下

    大概是这样的:

    System.Windows.Forms.FontDialog fontDialog = new System.Windows.Forms.FontDialog();
    if (fontDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        FontFamilyConverter ffc = new FontFamilyConverter();
    
        this.textAnnotation.FontSize = fontDialog.Font.Size;
        this.textAnnotation.FontFamily =(FontFamily)ffc.ConvertFromString(fontDialog.Font.Name);
    
        if (fontDialog.Font.Bold)
            textAnnotation.FontWeight = FontWeights.Bold;
        else
            textAnnotation.FontWeight = FontWeights.Normal;
    
        if (fontDialog.Font.Italic)
            textAnnotation.FontStyle = FontStyles.Italic;
        else
            textAnnotation.FontStyle = FontStyles.Normal;
    }
    

    您可以创建一个新的字体对象,将当前样式的文本作为参数传递。这就是你可以做到的:

            var fontDialog = new FontDialog();
            fontDialog.Font = new Font(textInfo.FontFamily, textInfo.FontSize);
    
            if (fontDialog.ShowDialog() == DialogResult.OK)
            {
                var selectedFont = fontDialog.Font;
                textInfo.FontSize = selectedFont.Size;
                textInfo.FontFamily = selectedFont.FontFamily.Name;
                textInfo.FontWeight = selectedFont.Bold ? "Bold" : "Regular";
                textInfo.FontStyle = selectedFont.Italic ? "Italic" : "Normal";            
            }            
    

    谢谢马克·霍尔。。。但我的意思是我想将当前的文本样式设置为FontDialog。例如:我创建了新的注释文本。我调用字体对话框编辑文本,完成后单击确定。然后我再次调用字体对话框,但它设置了默认值。那么如何将文本样式设置为FontDialog?@user1276594可能我不理解,但我上面给你的代码将更改FontFamily、大小、FontWeight和FontStyle。这两个字体对象非常不同,没有一种简单的方法可以完成转换。这就是为什么我建议您查看字体选择器示例,它是一个本机wpf字体对话框。@user1276594-我想我理解他的意思。他希望下次调用时能够将删除线、下划线等设置回FontDialog。这样他就可以将WPF文本中的设置传输回FontDialog——我也在尝试做同样的事情。@JuniperAsh。我确实理解了他的意思,这就是为什么我建议使用示例文件选择器,这是一个Wpf示例。这两种字体是不同的,很难在两者的某些方面取得一致。