Apr 102014
 

In einer WPF Library kann man ja normalerweise mit Rechtsklick -> Add direkt ein neues Resource Dictionary einfügen. Oder mit Add -> New Item.

Wurde das Projekt anfänglich nicht als WPF Application oder WPF UserControl Library / Custom Control Library angelegt sondern vielleicht als Class Library sieht das Menü leider so aus:


Selbst unter Add New Item ist keine Vorlage für ein Resource Dictionary zu finden.

Um die Funktionalität zu erhalten kann man die *.csproj Datei öffnen und folgende Zeile im ersten PropertyGroup Xml Tag ergänzen:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Die erste Guid bestimmt dass es ein WPF Projekt ist. Die zweite, dass es sich um C# handelt. Danach passt das Context Menü auch wieder:


Eine nette Übersicht zu den ProjectTypeGuids gibt es auch hier:

http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs

Aug 172012
 

Hier mal zwei Beispiele wie man mittels eigenen Behavior den Fensterinhalt einer WPF Anwendung per Strg+Mausrad zoomen kann. Die beiden Behaviors lassen sich per Expression Blend mit der Maus auf die entsprechenden Controls ziehen oder mit ein paar Zeilen Xaml Code einbinden:

ZoomWindowBehavior:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
        xmlns:behaviors="clr-namespace:ZoomBehaviors;assembly=ZoomBehaviors"
        x:Class="ZoomTestClient.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <i:Interaction.Behaviors>
        <behaviors:ZoomWindowBehavior/>
    </i:Interaction.Behaviors>
    ...

ZoomUIElementBehavior:

<Image Source="world.png" VerticalAlignment="Center" HorizontalAlignment="Center" Width="64" Height="64">

<i:Interaction.Behaviors> <behaviors:ZoomUIElementBehavior MaximumScale="4" MinimumScale="0.5"/> </i:Interaction.Behaviors> </Image>

Zusätzlich kann man noch einen MaximumScale und MinimumScale angeben: MinimumScale=”0.5” und MaximumScale=”4” bedeutet dann also einen Zoom von 50%-400%. Genutzt wird dabei das LayoutTransform der Controls. Weiterhin wird noch die System.Windows.Interactivity.dll und die Microsoft.Expression.Interactions.dll aus dem Expression Blend SDK verwendet.

Das komplette Beispiel inkl. der beiden Behaviors gibt es hier: Download

Nov 102011
 

Im letzten WPF Training wurde ich gefragt wie man den Focus mit Pfeil hoch/runter auf das vorhergehende oder nachfolgende Control setzen kann. Hier ein wenig C# Code dazu:

private void Window_KeyUp(object sender, KeyEventArgs e)
{
    switch (e.Key)
    {
        case Key.Up:
            MoveFocus(FocusNavigationDirection.Previous);
            break;
        case Key.Down:
            MoveFocus(FocusNavigationDirection.Next);
            break;
    }
}
 
private void MoveFocus(FocusNavigationDirection direction)
{
    UIElement focusedElement = Keyboard.FocusedElement as UIElement;
 
    if (focusedElement != null)
        focusedElement.MoveFocus(new TraversalRequest(direction));
}

Download: MoveFocus