在WPF中将值设置为FontDialog

时间:2012-07-20 03:52:54

标签: wpf fonts edit

我正在使用文本处理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;
        }

2 个答案:

答案 0 :(得分:2)

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

  1. Fontsize不会出错,但WPF字体大小与WinForms不同。
  2. 您需要使用FontFamilyConverter来设置字体名称。
  3. Underline和Strikeout是WPF中的TextDecorations
  4. 对于字体样式和字体权重属性,您可以使用条件逻辑来设置属性。
  5. 你最好使用Wpf原生的东西,因为Font对象不同。 Wpf Text博客上有一个Sample Font Chooser。我建议调查一下。

    类似的东西:

    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;
    }
    

答案 1 :(得分:0)

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

        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";            
        }