1

我正在处理带有文本的 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;
        }
4

2 回答 2

2

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

  1. Fontsize 不会出错,但 WPF 字体大小与 WinForms 不同。
  2. 您将需要使用FontFamilyConverter来设置字体名称。
  3. 下划线和删除线是 WPF 中的 TextDecorations
  4. 对于字体样式和字体粗细属性,您可以使用条件逻辑来设置属性。

您最好使用 Wpf 原生的东西,因为 Font 对象是不同的。Wpf Text 博客上有一个示例字体选择器。我建议调查一下。

像这样的东西:

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;
}
于 2012-07-20T04:29:47.153 回答
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";            
        }            
于 2018-10-08T19:42:15.047 回答