The Artima Developer Community
Sponsored Link

.NET Buzz Forum
WPF: Data Template zur Laufzeit ändern

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
-

Posts: 1524
Nickname: nitronic
Registered: Jul, 2006

Norbert Eder works as a software architect.
WPF: Data Template zur Laufzeit ändern Posted: May 29, 2008 1:21 PM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by -.
Original Post: WPF: Data Template zur Laufzeit ändern
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Latest .NET Buzz Posts
Latest .NET Buzz Posts by -
Latest Posts From Norbert Eder - Living .NET

Advertisement
Wer WPF-Anwendungen entwickelt, kommt sehr schnell zur Problematik, dass dich Data Templates zur Laufzeit ändern sollen. Dies kann passieren, da bei einem MouseOver zusätzliche Informationen angezeigt werden sollen, oder es soll auf eine andere Aktion eine Reaktion gezeigt werden. Die Realisierung ist recht einfach, aber häufig gefragt.

Nehmen wir also ein kleines Beispiel. Gegeben sei ein Button, der eine Beschriftung anzeigt, die durch ein standardmäßig gesetztes Data Template erweitert wird. Beim MouseOver (also quasi als Hover-Effekt), sollt dieses Data Template ersetzt werden und vor der eigentlichen Beschriftung des Buttons einen anderen Text anzeigen, welcher beim Verlassen wieder zurückgesetzt wird.

Dafür erstellen wir ein Fenster, welches die jeweiligen Data Templates enthält, sowie die Darstellung des Buttons. Hier das Innenleben des Fensters als XAML:
<Window.Resources>
    <DataTemplate x:Key="DefaultTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Default: "/>
            <TextBlock Text="{Binding}"/>
        </StackPanel>        
    </DataTemplate>
    <DataTemplate x:Key="SpecialTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Special: "/>
            <TextBlock Text="{Binding}"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<Grid>
    <Button 
        x:Name="TestButton" 
        Content="Test" 
        ContentTemplate="{StaticResource DefaultTemplate}"/>
</Grid>

Damit wären nun die beiden Data Templates definiert und der anzuzeigende Button. Das Template namens DefaultTemplate ist dem Button standardmäßig zugewiesen und setzt der eigentlichen Beschriftung des Buttons ein Default: voraus. Das Template, auf welches bei einem Hover gewechselt werden soll, setzt der eigentlichen Besschriftung ein Special: voraus.

In der Codebehind-Datei werden nun die notwendigen Events abonniert:
  • MouseOver
  • MouseLeft

Befindet sich die Maus über dem Button, soll das spezielle Template angewendet werden. Beim Verlassen der Maus, muss das ursprüngliche Template (also das DefaultTemplate) wieder hergestellt werden. Sehen wir uns dazu den C#-Code an:
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        this.TestButton.MouseMove += 
            new MouseEventHandler(TestButton_MouseMove);
        this.TestButton.MouseLeave += 
            new MouseEventHandler(TestButton_MouseLeave);
    }

    private void TestButton_MouseMove(
        object sender, 
        MouseEventArgs e)
    {
        TestButton.ContentTemplate = 
            this.FindResource("SpecialTemplate") as DataTemplate;
    }

    private void TestButton_MouseLeave(
        object sender, 
        MouseEventArgs e)
    {
        TestButton.ContentTemplate = 
            this.FindResource("DefaultTemplate") as DataTemplate;
    }
}

Im Konstruktor des Fensters werden die beiden benötigten Events abonniert. In den jeweiligen Events wird nichts anderes gemacht, als in den Ressourcen nach dem gewünschten DatenTemplate zu suchen und es der Eigenschaft ContentTemplate des Buttons zuzuweisen. Idealerweise sollte noch eine Sicherheitsabfrage bezüglich der Existenz der Ressource untergebracht werden.

Damit ist es nun möglich, zur Laufzeit das Data Template eines Elements zu wechseln.

Read: WPF: Data Template zur Laufzeit ändern

Topic: WPF Application Lifetime Cycle Previous Topic   Next Topic Topic: Weiter muss es gehen ...

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use