Thema: Avalon

Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Avalon

  Alt 25. Aug 2005, 08:17
Oh, da habe ich dich wohl falsch verstanden.
In 2.0 wird nämlich auch der Designer code von SWF in einer anderen Datei abgelegt.

Zu Avalon aka WPF:

XAML mit DFM zu vergleichen, ist ziemlich unpassend.
DFM als Resource war sozusagen der Weg des geringsten Widerstandes. Es ist einfacher Design infos in ein solches Format zu packen und zur Laufzeit daraus die GUI zu erzeugen.
XAML ist ein Markup, das während des Compilierens mit MsBuild in Code und Resource umgewandelt wird.
Dadurch muss man zur Laufzeit nicht das ganze Design als Resource entpacken sondern man hat hauptsächlich Code mit den Werten (TExte, Farben,...) im schnellen BAML Format als Resource.

kleines Beispiel:
XML-Code:
<Window x:Class="AvalonApplication2.Window1"
        xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
        xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"
        Text="AvalonApplication2">
   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition/>
         <RowDefinition/>
      </Grid.RowDefinitions>
      <TextBlock Grid.Row="0"
                 Name="TestTextBlock"
                 FontSize="50"
                 TextAlignment="Center"
                 VerticalAlignment="Center">
         Hallo welt
      </TextBlock>
      <Button Grid.Row="1"
              Click="TestClick"
              Width ="100"
              Height="30">
         Klick mich
      </Button>
   </Grid>
</Window>
Dem TextBlock gab ich einen Namen. Im generierten Designer Code wird deshalb ein Feld in meiner Windows class angelegt, das derm TextBlock entspricht.
Der Button bekam nur einen Click handler und bekommt kein Feld.

Den click handler muss ich im Code anlegen und kann darin auf den TextBlock zugreifen:

Delphi-Quellcode:
namespace AvalonApplication2;

interface

uses
  System.Windows;

type
  Window1 = public partial class(Window)
  private
    method TestClick(sender: Object; e: RoutedEventArgs);
  public
    constructor;
  end;
  
implementation

constructor Window1;
begin
  InitializeComponent();
end;

method Window1.TestClick(sender: Object; e: RoutedEventArgs);
begin
   TestTextBlock.TextContent := 'was anderes';
end;
  
end.
Wie du im Screeen shot sehen kannst, habe ich hier ein Feld, obwohl ich das nur im Markup angegeben habe.
Mit MsBuild sind eine Haufen Dinge möglich um Code während des Kompilierens zu injezieren.
Miniaturansicht angehängter Grafiken
jens.avalonsample_142.png  
  Mit Zitat antworten Zitat