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.