#
WPF: Event Funktion zu einem UIElement oder UserControl hinzufügen
 
Aufgabe:
Ich möchte einem UIElement welches ich zur Laufzeit erstelle automatisch die Funktion mitgeben, dass es auf Maus-Klicks oder Tastatureingaben reagiert.
 
Lösung:
Hierzu muss man bei der Initialisierung des Controls den Event direkt einfügen

 
Code Erklärung:
In der Code-Behind Datei C#   wird die Klasse des Controls definiert mit public class mein_Control:FrameworkElement
Die Initialisierung ist der erste Code welcher bei der Erstellung aufgerufen wird, wenn das UIElement entweder in der Xaml Datei per XAML Code eingefügt wurde
Oder wenn das Control Element zur Laufzeit mit new erstellt wird.
Die Initialisierungsfunktion ist die gleichnamige Methode wie die Klasse. Hier ist es
public OutlineTextElement()
        {..}
 

public class OutlineTextElement : FrameworkElement
{
..
 
public OutlineTextElement()
{
 

 
In diese Initialisierungsfunktion wird der Mausevent eingefügt.
Hierzu tippt man die Standard-Event Funktion des Frameworks ein. Hier bei der Eingabe von Mouse… kommt schon die Intellisense Auswahl
Mousedown. Die Intellisense Auswahl erscheint mit Strg-J oder Strg-Enter

 
Sobald man das += eintippt gibt Intellisense in Visual Studio die Möglichkeit mit TAB-Taste den Event als Methode mit Parametern anzufügen
MouseDown += OutlineTextElement_MouseDown;

 
Methode, Event
Dadurch wird der komplette Rumpf einer Funktion eingefügt, welcher ausgeführt wird wenn das Ereignis auftritt.
Hier ist es die Reaktion auf einem Mausklick.
Die Methode angefügt und ausgeführt

private void OutlineTextElement_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Mousedown");
//throw new NotImplementedException();
}
 

 
In diese Methode muss man das throw new NotImplementedException auskommentieren oder löschen und einen eigenen Code einfügen wie zum Beispiel die Messagebox Meldung
 
 
WPF, C# Code:

public class OutlineTextElement : FrameworkElement
{
..
 
public OutlineTextElement()
{
//---------< Init: OutlineTextElement() >---------
..
Loaded += (o, e) => { QueueRenderText(); };
MouseDown += OutlineTextElement_MouseDown;
KeyDown += OutlineTextElement_KeyDown;
//---------</ Init: OutlineTextElement() >---------
}
 
private void OutlineTextElement_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Mousedown");
//throw new NotImplementedException();
}
 
private void OutlineTextElement_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("Key=" + e.Key);
//throw new NotImplementedException();
}

 
 
In XAML Code

 
Die Initialisierung findet statt, indem das UIElement Control in XAML direkt eingefügt wird

<Window x:Class="wpf_Font.MainWindow"
..
xmlns:local="clr-namespace:wpf_Font"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="46"/>
<RowDefinition Height="275*"/>
</Grid.RowDefinitions>
<TextBox x:Name="tbxText" HorizontalAlignment="Left" Margin="18,9,0,13.4" TextWrapping="Wrap" Text="Hello" Width="120" TextChanged="tbxText_TextChanged" />
<Button x:Name="btnShow" Content="Show Text" Margin="149,9,0,16.4" d:LayoutOverrides="Height" HorizontalAlignment="Left" Width="75" Click="btnShow_Click"/>
<local:OutlineTextElement x:Name="ctlFormattedText" Text="Hello" Grid.Row="1" />
</Grid>
</Window>

 
Mobile

.

123movies