Hilfe - Suche - Mitglieder - Kalender
Vollansicht: MCML mit Code verbinden
MCE-Community.de > Windows Media Center Software > Media Center PlugIns/AddIns, Hacks, Mods + ZusatzSoftware > [mceCodeZone] Programmierung > mceCodeZone - Grundlagen & Tutorials
wima
Hallo
Ich habe mir das Vista SDK sowie die Z-Applikation angeschaut. Trotzdem ist mir noch etwas unklar: Wie verbinde ich den MCML-Code mit dem C#-Code meiner Anwendung? Z.B. wie füge ich einen Button ein, um dann bei einem Klick eine Methode in meinem Code auszuführen?
Und wie kann ich per C#-Code einen Button hinzufügen?
Ich bin für Codeschnipsel und andere Hinweise sehr dankbar.

Gruss wima
absalom
ich habe mir erst eben die SDK runtergeladen, habe aber beim googlen von "mcml c#" u.a. dieses und das gefunden. Vieleicht hilft es für den Start. Der Rest müsste sich dann aus den MCML samples ergeben.
Grüße
absalom
wima
Vielen Dank für die Links. Inzwischen bin ich etwas weiter gekommen. Ich kann zwar noch nicht sagen, dass ich durchblicke, aber ich kann in meinem Projekt weiter machen rolleyes.gif
Wie ich einen Butten per Code hinzufügen kann, habe ich zwar noch nicht rausgefunden, aber ich kann einen Repeater verwenden, der dann die Buttons einfügt.
Zur Zeit schlage ich mich nun etwas mit dem Designen von Buttons aus. Ich möchte sie möglichst ähnlich wie in Media Center haben.

Gruss wima
Spyn Doctor
Für die Buttons:

HIER hat sich schon jemand die Mühe gemacht und ein HTML-SDK für Vista gemacht. Das enthält in dem Unterfolder "Common/Images" auch diverse PNGs, u.a. auch für Buttons im VMC-Look.

Die kann man wiederum prima im MCML verwenden um einen Button draus zu machen. Ähnlich wie beim SimpleButton aus dem MCML-Sampler (bloss halt mit einem anderen Bild). Ich habe das Bild COMMON.BUTTON.LEFT.FOCUS.PNG benutzt. Wenn du dann dem Image noch den passenden NineGrid-Wert verpasst (nach meinen Tests passt "6,6,6,6" zu diesem Image), ist es auch egal wie gross der Button ist, weil das Hintergrundbild verzerrungsfrei (zumindest an den Rändern, also da wo es wichtig ist) an die Buttongrösse angepasst wird.

Habe damit Buttons hinbekommen die genau wie die originalen aussehen (OK, bisher noch ohne Animation, also ohne dieses An/Abschwellen des Glanzeffektes auf dem Button, aber das sollte auch kein Problem sein, nur wollte ich mich um die Animationen erst ganz zum Schluss kümmern, wenn sonst alles in meinem Projekt funktioniert).

Doc
olcay
Es ist nicht möglich über den Code die UI zu definieren. Es ist grundsetzlich so, dass man Daten bereitstellt welche vom MCML Code verwendet wird um die Oberfläche zu erstellen. Ich erstelle z.B. auch die Commands meistens nicht im MCML Code sondern im C# Code (manche Base UIs ausgenommen). Das hat folgende Vorteile:

1. Du kannst anderen C# Code an die Events des Commands binden (z.B. Command.Invoked, ...)

2. Durch die direkte Bindung der Command Events in der Logik ersparst Du dir den MCML Code im <Rules></Rules> Abschnitt.

3. Es ist etwas schneller als die Bahandlung der Events via MCML und der Code (MCML & C#) wird übersichtlicher.

-Olcay
Chronos
ZITAT(wima @ 06.02.2007, 09:24) *
Hallo
Ich habe mir das Vista SDK sowie die Z-Applikation angeschaut. Trotzdem ist mir noch etwas unklar: Wie verbinde ich den MCML-Code mit dem C#-Code meiner Anwendung? Z.B. wie füge ich einen Button ein, um dann bei einem Klick eine Methode in meinem Code auszuführen?
Und wie kann ich per C#-Code einen Button hinzufügen?
Ich bin für Codeschnipsel und andere Hinweise sehr dankbar.

Gruss wima



Muss den Post nachmal nach oben scheiben, denn die selbe Frage hab ich auch, wie generiert man mit c# nen mcml button ? Habt ihr da schon ne Lösung für gefunden ?


Gruß
Chronos
Spyn Doctor
Hat Olcay doch schon gesagt: Es geht nicht. Du kannst nicht aus C# einen neuen Button erzeugen der im MCML nicht vorgesehen war. Wenn du dynamisch erscheinende Buttons brauchst (also eine verschiedene Anzahl Buttons, evtl. mit verschiedenen Labels, je nach Situation), dann musst du dir anders behelfen. Z.B. mit einem Repeater, oder z.B. du definierst in MCML einen Reihe leerer und zunächst unsichtbarer Dummy Buttons (soviele wie du maximal gleichzeitig brauchst), die ihre Beschriftung und ihren Visible/Invisible-State über Bindings bzw. Rules bekommen die wiederum an C# Variablen angeschlossen sind, so dass du dann aus C# heraus einzelne Buttons sichtbar/unsichtbar machen kannst und neu beschriften kannst.

Doc
Chronos
Ach so läuft der Hase, irgendwie hatte ich das anders verstanden mit dem UI und so (Bin halt noch Anfänger vorher html / php wink.gif )
Aber was wäre jetzt wenn man z.b. sag ich mal ne Auflistung eines Verzeichnises macht, da sind ja nicht nur Ordner sondern auch verschiedene Files drin. Wenn ich jetzt nur Ordner im mcml code als dums einbaue dann kann der code auch nur die Ordner anzeigen und nicht zwischen ordner und files unterscheiden weil vorher ein ganzer Block nur ordner definiert wurde.

Mal angenommen ich baue in den mcml code 9 Ordnerbuttons ein ->

Ordner, Ordner, Ordner
Ordner, Ordner, Ordner
Ordner, Ordner, Ordner

und jetzt habe ich aber nur ein Verzeichnis wo 8 Ordner und ein File drinnen sind, was mach ich dann ? ->
Ordner, Ordner, Ordner
Ordner, Ordner, Ordner
Ordner, Ordner, File
wima
Verwende doch einfach mehrere Repeater.

Gruss wima
Spyn Doctor
@Chronos: Ein Repeater zusammen mit einem passenden Layout (für das Button-Grid) ist dafür in der Tat das Mittel der Wahl.

Z.B. hättest du dann im C# Code ein ArrayListDataSet LINK in dem du die Ordner- und Datei-Infos ablegst. Am einfachsten so, dass du für Ordner und für Dateien zwei verschiedene Objektklassen verwendest, dann kann der Repeater die beiden nämlich unterscheiden (mit einem TypeSelector, ein ValueSelector wäre aber evtl. auch möglich) und so für beide verschiedene Buttons darstellen.
Da ein ArrayListDataSet ja auch ein ModelItem ist, werden ausserdem alle Veränderungen im Set automatisch an den Repeater weitergegeben, d.h. sobald du ein Objekt zum Set hinzufügst, änderst oder löschst, wird dies auch automatisch vom Repeater dargestellt.

Den Repeater definierst du in MCML, siehe hier LINK
Siehe auch TypeSelector und ValueSelector.

Bevor du weitermachst würde ich aber ganz dringend empfehlen (falls noch nicht gemacht) den Programming Guide zu lesen, und zwar von vorne bis hinten, alle Kapitel. Die Struktur des Guides ist manchmal etwas "überraschend", so dass man manchmal in einem Kapitel über ein bestimmtes Thema auch Tipps zu anderen Themen findet, die einem entgangen wären wenn man das Kapitel ausgelassen hätte. Also empfehle ich tatsächlich alles zu lesen.

Doc
Chronos
JO, Thx, das SDK hab ich schon installiert, schau dort auch hinein, doch bin ich er der Typ der nach dem Schema Try & Error und lerning by doing besser lernt tongue.gif

Aber die Sache mit dem Repeater schaut schonmal richtig aus, werde es mal versuchen umzusetzen, thx
Spyn Doctor
ZITAT(Chronos @ 01.08.2007, 14:58) *
JO, Thx, das SDK hab ich schon installiert, schau dort auch hinein, doch bin ich er der Typ der nach dem Schema Try & Error und lerning by doing besser lernt tongue.gif


Ist bei mir normalerweise auch so. Docs schaue ich mir immer erst an wenn ich nach was Bestimmtem suche. Aber bei der MCML habe ich es tatsächlich mal bereut: Nachdem ich bei einigen Dingen stundenlang rumprobiert und rumgesucht hatte (mit mässigem Erfolg) habe ich dann doch mal im Guide geschmökert und hab's dann dort tatsächlich gefunden. So lang ist der Guide ja nicht, ich kann jedenfalls nur empfehlen ihn mal zu lesen oder zumindest zu überfliegen.

Doc
olcay
Es ist in der tat so, dass die meistens Entwickler erst in die Dokumentation schauen wenn sie eine bestimmte Information benötigen oder nicht mehr weiterwissen - die Tests während der Entwicklung des .NET Frameworks bestätigen das jedes mal.

Wie auch immer, Spyn Doctor hat die Lösung schon genannt und ich kann mich ihm nur anschließen. Hier ist einer der Selector am sinnvollsten, z.B. mit einem TypeSelector über den Type (FolderItem, FileItem oder wie auch immer deine Klassen heißen) den Repeater entscheiden lassen welches ViewItem er für das aktuelle Objekt verwenden soll.

smile.gif
wima
Nun habe ich sogar auch noch was gelernt. Den Selector kannte ich bis jetzt gar nicht, ich habe einfach zwei Repeater gemacht wink.gif Aber ein Repeater, mit einem Selector für eine Lampe und einen für einen Dimmer (in meiner Visualisierung) muss ich demnächst ausprobieren...

Gruss wima
olcay
Hehe man lernt nie aus... smile.gif
Dieses ist eine vereinfachte Darstellung unseres Foreninhaltes. Um die detaillierte Vollansicht mit Formatierung und Bildern zu betrachten, bitte hier klicken.
Invision Power Board © 2001-2012 Invision Power Services, Inc.