c# - open - GTK UI Se ve diferente cuando se ejecuta desde un paquete y cuando se ejecuta desde Xamarin Studio
xamarin webview template (1)
GTK 2 Opciones de temática:
- Use el tema predeterminado del sistema
- Por usuario a través de
~/.gtkrc
- Por aplicación tematizando vía apk GTK
- Por aplicación tematización vía var de entorno
GTK 2 Theming:
La temática se maneja en GTK 2 a través de archivos de recursos con el maestro normalmente llamado ''gtkrc''. Estos archivos de recursos pueden ser independientes, incluir otros archivos de recursos e imágenes externas de referencia (iconos), etc. ... Las gtkrc
internas de los archivos basados en gtkrc
están fuera del alcance aquí, pero hay muchas referencias en la web para GTK 2.0 recursos / tematización.
Mono w / GTK 2:
Mono en OS-X instala un tema predeterminado de GTK2 ( gtkrc
) y algunos temas alternativos:
Ubicación: /Library/Frameworks/Mono.framework/Versions/4.2.1
find . -name "gtkrc"
./etc/gtk-2.0/gtkrc
./share/themes/bubble/gtk-2.0/gtkrc
./share/themes/Clearlooks/gtk-2.0/gtkrc
./share/themes/Mac/gtk-2.0-key/gtkrc
./share/themes/Quartz/gtk-2.0/gtkrc
./share/themes/Xamarin/gtk-2.0/gtkrc
El que se encuentra en <Mono/Version>/etc/gtk-2.0
es el predeterminado (estilo Tango), mientras que una de las alternativas es ''Xamarin'' y es el que se usa para estilizar Xamarin Studio (llamado internamente "Mac Theme for" Xamarian ").
En cuanto a controlar qué tema se aplica a su aplicación, puede permitir que el usuario lo controle a través del directorio $ HOME basado en archivos .gtkrc
(en mi humilde opinión: cuántos usuarios realmente saben cómo hacer eso o incluso qué y las pesadillas de soporte de '' Los usuarios finales expertos que modifican la interfaz de usuario, prefiero que la experiencia UIX se establezca en algo uniforme para todos los usuarios, pero, nuevamente, esa es solo mi opinión.
Se supone que debes poder configurar el entorno var GTK2_RC_FILES
en el script de inicio de la aplicación, pero nunca tuve suerte con esto.
Nota: El env. var. GTK_THEME
funciona en GTK3 (pero Mono está vinculado a GTK2)
- Ref .: Muy buen intercambio de pila relacionado con esto @ https://unix.stackexchange.com/questions/14129/gtk-enable-set-dark-theme-on-a-per-application-basis
- Ref .: Otra buena Q / A: piel específica de aplicación GTK + posible?
Aplicación tematización a través de GTK api:
Con su aplicación puede asignar GTK para usar uno de los temas instalados Mono o uno que su aplicación proporciona.
ANTES de Gtk.Application.Init()
, puede hacer lo siguiente para asignar el archivo gtkrc:
Gtk.Rc.AddDefaultFile ({gtkrcFile});
Gtk.Rc.Parse ({gtkrcFile});
Si tiene su propio tema, agrupe los archivos (gtkrc, otros archivos gtkrc incluidos, íconos, imágenes, etc.) dentro de su .app
. Normalmente, estos se incluirán dentro del Contents/Resource directory and use the above code to assign the
gtkrc` que está en su paquete.
Para los ejecutables independientes también he usado un archivo gtkrc incrustado y lo extraigo en un archivo tmp en tiempo de ejecución:
using System;
using System.Reflection;
using System.IO;
using Gtk;
namespace themes
{
class MainClass
{
public static void Main (string[] args)
{
InitGlobalResourceFile ();
Application.Init ();
MainWindow win = new MainWindow ();
win.Show ();
Application.Run ();
}
static void InitGlobalResourceFile ()
{
String gtkResouceFile;
Assembly myAssembly = Assembly.GetExecutingAssembly ();
string[] names = myAssembly.GetManifestResourceNames ();
foreach (string name in names) {
Console.WriteLine (name);
if (name.Contains ("GtkThemeResource.rc")) {
gtkResouceFile = name;
break;
}
Console.WriteLine ("Gtk Theme Resource not found in manifest");
}
var tmpFile = Path.GetTempFileName ();
var stream = myAssembly.GetManifestResourceStream (gtkResouceFile);
string gtkrc;
using (StreamReader reader = new StreamReader (stream)) {
gtkrc = reader.ReadToEnd ();
}
using (StreamWriter outputFile = new StreamWriter (tmpFile)) {
outputFile.WriteLine (gtkrc);
}
Rc.AddDefaultFile (tmpFile);
Rc.Parse (tmpFile);
}
}
}
- FYI: El tema de Xamarin GTK2 / OS-X se mantiene aquí ( https://github.com/mono/xamarin-gtk-theme )
Tengo la aplicación C # usando Mono framework y GTK para UI. Cuando lo ejecuto desde Xamarin Studio parece que esto
He incluido Mono y GTK en un paquete independiente. Al ejecutarlo, se ve diferente.
¿Cuál parece más nativo de la plataforma OSX? Si es el primero, ¿cómo puedo obtener el mismo aspecto en la aplicación incluida?