FontButton字体更改无法正常工作

时间:2016-05-31 06:47:45

标签: c# xamarin mono gtk

我正在使用以下代码从FontButton获取所选字体。但是即使我选择了不同的字体,fontName也不会改变......虽然大小有效。

protected void OnFontbutton2FontSet (object sender, EventArgs e)
{
    try
    {
        string sfont = fontbutton2.FontName; 

        string fontName = sfont.Substring(0,sfont.LastIndexOf(' '));

        int fontSize = int.Parse(sfont.Substring(sfont.LastIndexOf(' ')+1).Trim());// I know, looks a bit ugly 
        cfont = new Font(fontName ,fontSize, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);
            selectedfont=new Font(fontName ,fontSize, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);
        MessageDialog md = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Close, fontName);
        int result = md.Run ();
        MessageDialog md2 = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Close, selectedfont.Name);
        int result2 = md2.Run ();
        if (wwork.IsBusy == false) {
            wwork.RunWorkerAsync ();
        } else {
            bgdirty = true; 
        }
    }
    catch(Exception ex) {
    }
}

但新创建的字体cfont对象保留为默认字体,只有字体大小更改...字体名称不会更改。

我做错了什么?请指教。

更新: 带字体变量的控制台输出(字体)名称设置

后打印
System.Drawing.Font myfont = new Font ("Tahoma", 50, FontStyle.Regular, GraphicsUnit.Pixel);
 Loaded assembly: /Users/me/Desktop/testproject/fonttest/fonttest/bin/Debug/fonttest.exe
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/gtk-sharp/2.12.0.0__35e10195dab3c99f/gtk-sharp.dll [External]
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/glib-sharp/2.12.0.0__35e10195dab3c99f/glib-sharp.dll [External]
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/atk-sharp/2.12.0.0__35e10195dab3c99f/atk-sharp.dll [External]
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll [External]
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/gdk-sharp/2.12.0.0__35e10195dab3c99f/gdk-sharp.dll [External]
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll [External]
    Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll [External]
    Fontconfig error: Cannot load default config file
    Lucida Grande

2 个答案:

答案 0 :(得分:2)

请勿尝试使用sfont.Substring()修改字体名称。许多字体的名称都有空格。

事实上,虽然您可以使用单独的字体属性,但您应该通过font-desc属性获取PangoFontDescriptor并使用它。然后,您可以复制该描述符,对其进行修改,然后在绘图操作中使用它。

您的线程内容看起来很可疑。你不能在工作线程中对GTK +做任何事情。如果要重新绘制窗口小部件,请使用gtk_widget_queue_draw()或其中一个相关功能。

答案 1 :(得分:0)

使用Font命名空间中的System.Drawing类 而不是string sfont = fontbutton2.FontName;使用string sfont = fontbutton2.Font.Name;

编辑1,试试这种方式:

FontFamily fontFamily = new FontFamily("Tahoma");
System.Drawing.Font cfont = new Font(
   fontFamily,
   10, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);
相关问题