Posts mit dem Label WPF werden angezeigt. Alle Posts anzeigen
Posts mit dem Label WPF werden angezeigt. Alle Posts anzeigen

Dienstag, 20. Oktober 2009

VS2010 Extension: ZoomEditorMargin

VS2010 Beta2 ist endlich draußen. Kaum heruntergeladen und installiert, habe ich auch schon die erste Erweiterung für den neuen WPF Codeeditor geschrieben!



Besonders gespannt war ich auf die Zoom Funktion des Codeeditors. Als ich VS2010 zum ersten Mal öffnete, war ich jedoch etwas enttäuscht. Auf der linken Seite des Code Editors befand sich lediglich eine Combobox, über die man den Zoom einstellen kann. Aus meiner Erfahrung mit Office 2007, hätte ich jedoch gerne einen Slider gehabt, mit dem ich stufenlos zoomen könnte.



Zum Glück lässt sich der neue WPF Codeeditor in VS2010 an allen Ecken und Enden anpassen. Gesagt getan, habe ich eine eigene "Margin" für den Editor geschrieben. Eine Margin ist ein Bereich im Codeeditor, in dem man ein WPF Control platzieren kann. Dies ist nur eine von vielen Möglichkeiten den Codeeditor anzupassen und zu erweitern.



Wer das ZoomEditorMargin herunterladen und direkt ausprobieren möchte, kann dies in der , oder über den ExtensionManager in VisualStudio tun.



Der Code Editor ohne Zoom Extension




Der Code Editor mit Zoom Extension





In den nächsten Posts werde ich erklären, wie ich diese Extension erstellt habe. Es gibt viele Aspekte, auf die ich näher eingehen möchte. Deswegen verrate ich nicht alles schon in diesem Blog Post.



Viel Spaß und stay tuned



Benny

Mittwoch, 28. Januar 2009

WPF Window als Vollbild

Ein WPF Fenster kann auch im Vollbildmodus angezeigt werden und somit den gesamten Bildschirmplatz einnehmen ohne die Windowsstartleiste

Wie funktioniert das?

Nun, es ist einfacher als man denkt. Dafür braucht man keine nativen Windows APIs aufzurufen.

Folgender XAML Code zeigt wie es geht:


<Window x:Class="WpfApplication1.Window1"


xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


Title="Window1"


WindowStyle="None"


WindowState="Maximized"


WindowStartupLocation="CenterScreen">


<Grid Background="Red">



</Grid>

</Window>

Zunächst wir der WindowState mit Maximized angegeben. Das bewirkt natürlich dass das Fenster den gesamten Bildschirm ausfüllt.

Den ganzen Bildschirm? Nein, denn unten (oder oben) [oder auch an den Seiten] befindet sich die Windows Taskbar.

Wird nun der WindowStyle wird auf None gesetzt, hat das Fenster keinen Rahmen, also auch keine Titelleiste und Controlbar.

Allerdings verschwindet nun auch die Taskbar und das Fenster füllt tatsächlich den gesamten Screen aus.

Nun kann z.B. eine Photoshow starten.


Problematisch wird es, wenn der Anwender versucht das Fenster zu schließen, denn es fehlt ja die Titelleiste mit dem Schließen bzw. Minimieren Button. Man sollte daher noch auf Events der Tasten ESC oder F11 reagieren. Diese werden standardmäßig in Vollbild Applikationen verwendet, um in den normalen Fenstermodus zurückzukehren.


public
partial
class
Window1 : Window

{



public Window1()

{

InitializeComponent();


this.KeyDown = RootKey;

}



void RootKey(object sender, KeyEventArgs e)

{


if ((e.Key == Key.Escape) (e.Key == Key.F11))

{


if (this.WindowStyle == WindowStyle.None)

{


this.WindowStyle = WindowStyle.ThreeDBorderWindow;


this.WindowState = WindowState.Normal;

}


else

{


this.WindowStyle = WindowStyle.None;


this.WindowState = WindowState.Maximized;

}


e.Handled = true;


}


}

}


Ob dieses Feature beabsichtigt ist; weiß ich nicht. Ob dieses Feature jede Anwendung benötigt? Eher nicht.

Wer allerdings eine Vollbild Anwendung entwicklen will, der kann auch das mit WPF tun, und zwar mit relativ wenig Aufwand.

Dienstag, 29. April 2008

WPF goes Transitions

Effekte a la PowerPoint? Mit WPF kein Problem!?

WPF bietet zwar Animationsunterstützungen, doch diese müssen mühsam programmiert werden.

Nun gibt es ein Framework das Übergangseffekte für WPF bereitsstellt.
z.B. Wipe, Fade, oder RotatingCube. Auch aufwendige 3D Animation sind frei verfügbar.

Entwickelt hat dies Jaraed Bienz.
Download auf CodePlex: Transitionals

Wer jetzt vielleicht sagt: "He, das habe ich schonmal gesehen!"
der hat vollkommen recht. Auf der letzten Basta habe ich einen Vortrag über CAB gehalten und auch Acropolis vorgestellt. Für mich hatte Acropolis keine Zukunfstaussichten (Wurde ja auch eingestampft). Jedoch einige Bestandteile hatten Potential in WPF intigriert zu werden. U.a. auch das Transitionframework.

Zwar ist das Transitionframework (noch) kein Teil von WPF. Aber dennoch sehr nützlich, zumal frei zugänglich und erweiterbar.

Samstag, 8. September 2007

Der Name "InitializeComponent" wurde nicht deklariert

Hallo WPF Freunde!

In letzter Zeit verwende ich immer mehr WPF in meinen Anwendungen. Ganz auf WinForms möchte ich aber nicht versichten. Aus Gewohnheit nehme ich für einen neues VisualStudio Projekt die Projektvorlage "WinForms Anwendung". Wenn ich nun versuche ein WPF-UserControl zu meinem Projekt hinzufüge erscheint beim Kompilieren diese Fehlermeldung:

Der Name "InitializeComponent" wurde nicht deklariert

Mir kamen sofort einige Fragen in den Sinn:
-Habe ich .NET 3.0 richtig installiert?
- Habe ich die .NET 3.0 Extensions für VisualStuido richtig installiert?
- Ist meine XAML Datei in Ordnung?
- Macht ExpressionBlend die Probleme (damit designe ich die UserControls)?

Die Lösung ist dann doch relativ einfach.
Man muss die Projektdatei *.proj öffnen und dem BuildSystem von VisualStuido MSBuild mitteilen wie es XAML und Code-Behind Dateien zu kompilieren hat.

Diese Zeile muss man einfügen:

<import project="$(MSBuildBinPath)\Microsoft.WinFX.targets">


Klar, dass die normale .NET 2.0 WinForms Anwendung Projektvorlage noch nichts von XAML und WPF gehört hat und dementsprechend die Dateien nicht richtig kompilieren kann.

Benjamin Gopp

Montag, 9. Juli 2007

WPF: Wie erstelle ich einen autoskalierenden Text?

Es hat lange gebraucht bis ich mich an WPF (Windows Presentation Foundation) rangewagt habe. Ich erkenne aber immer mehr die Vorzüge von WPF. Z.B. erstelle ich gerade für eine Anwendung einen animierten Splash-Screen bzw. Intro. Das gibt natürlich wesentlich mehr her als ein statisches Bitmap auf dem das Anwendungslogo zu sehen ist. Ich brauche nicht zu erwähnen, dass dies mit GDI+ echt aufwändig wäre und lange nicht so gut aussehen würde wie mit WPF.

Der Splash-Screen soll natürlich voll Vektrobasiert sein, d.h. alle Grafiken, Text und Animationen, sollen sich der Größe des Fensters anpassen. Doch wie schaffe ich es, dass die Schriftgröße eines Textes in einer TextBox automatisch skaliert wird? Ich habe lange gesucht, und keine passende "einfache" Einstellung gefunden, wie z.B. TextBox.Strech = Fill; Hieran sieht man, dass WPF noch nicht ganz ausgereift ist. Es sind zwar viele Grundelemente vorhanden, die man zu anderen komplexen Elementen zusammenstellen kann, aber das muss man halt selber machen. Zudem braucht man eine Menge Wissen über WPF, was man am Anfang natürlich nicht hat. Wenn man also eine DataGridView in WPF braucht, wird man nicht direkt rangehen können, um sich eine eigene DataGridView zu bauchen; auch wenn die dafür erforderlichen Grundelemente vorhanden sind. 1. Braucht man viel Efahrung mit WPF und 2. kostet es enorm viel Zeit.

Aber zurück zu unserem skalierbaren Text.

Wir benötigen zunächst das Tool ExpressionBlend. Meine Lösung kann nicht programmiert werden, sondern benötigt ein Feature von ExpressionBlen

1. Wir nehmen einen TextBlock. (Achtung keine normale TextBox!)
2. Wir schreiben einen Text in unseren TextBlock. Es können auch andere Elemente wie Elipsen, Controls etc. zwischen dem Text stehen. Das ist mit einem TextBlock möglich. Dann die Schriftart und andere Einstellungen setzen.
3. Wir konvertiere nun den TextBlock in einen Path. Menü->Objekt->Pfad->in Pfad konvertieren. Alle Elemente des TextBlock auch der Text wird in einen Pfad konvertiert. Dieser Pfad besteht aus relativen Punkten die Vektororientiert sind und somit voll skalierbar.
4. Wir umgeben den Pfad mit einer ViewBox. Diese ViewBox kann automatisch ihre Childelemente skalieren.
5. Tada! Fertig ist unser automatisch skalierender Text

Nachteil: wenn man den Text ändern will muss man die Schritte erneut durchführen ;-(

Es wäre natürlich auch denkbar eine Skalierung in Abhängigkeit der Fenstergröße per Databinding zu ermöglichen. Hierzu müsste man aber entsprechende Berechnungen anstellen.