ahhay
ahhay | Hinter den Höfen 20 | 37339 Haynrode/Germany | 036077 935077

C# & XAML - Tipps


Action Delegat - Was ist das?
Mit dieser Funktion können Methoden gekapselt werden. Diese sind dann über einen einzelnen Parameter verfügbar, aber haben keinen Rückgabewert.

Grundsätzliche Implementierungsstruktur in C#
Parameter
obj - Der Parameter der Methode, die dieser Delegat kapselt.
Typparameter
T - Der Typ des Parameters der Methode, die dieser Delegat kapselt.
public delegate void Action<in T>(T obj)
                                        

Anwendungsbeispiel
Das Anwendungsbeispiel zeigt eine Methode, welche zwei Anweisungen enthält. Dort wird entschieden, wenn Wert A oder B ungleich 0 sind, wird eine spezifische Methode aufgerufen. Dieser Methodenaufruf ist in einer Action-Funktion gekapselt.
public void Rechnen(object obj)
{
    if (WertA != 0) Berechnen(_wertA, new Action(BerechnenA));
    if (WertB != 0) Berechnen(_wertB, new Action(BerechnenB));
}
                                        
Beide Anweisungen rufen die Methode Berechnen auf. Diese Methode übergibt den Methodenzeiger berechne() den Wert zur Berechnung
public void Berechnen(double wert, Action berechne)
{
    berechne(wert);
}
                                        
So können beide Berechnungsmethoden über einen Aufruf bedient werden.
Natürlich kann man diese Problemstellung leichter lösen, aber wir wollten ein Anwendungsbeispiel für die Action-Funktion aufzeigen.
private void BerechnenA(double wert)
{            
    ...
}
private void BerechnenB(double wert)
{
    ...
}
                                        

Header-Style in Textbox ändern
Seit der .net Framework-Version 4.5 können Textbox mit einem Header versehen werden. Diese Eigenschaft erleichtert die Beschriftung von Text-Eingabefelder ungemein.

Grundsätzliche Implementierungsstruktur in XAML
<Page.Resources>
    <ResourceDictionary>
        <Style TargetType="TextBox" x:Key="editField">
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Foreground" Value="Black"/>
                <Setter Property="FontSize" Value="20" />
                <Setter Property="TextAlignment" Value="Center"/>
                <Setter Property="BorderThickness" Value="10" />
                <Setter Property="BorderBrush" Value="Black" />
                <Setter Property="Margin" Value="10,5" />
                <Setter Property="HeaderTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <TextBlock Foreground="Red" Text="{Binding}" FontSize="12" />
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
        </Style>
    <Page.Resources>
<ResourceDictionary>