WPF: Benutzersteuerelemente

Um in WPF eigene Steuerelemente, sogenannte Benutzersteuerelemente, zu definieren, hilft uns Visual Studio beim Erstellen eines Grundgerüsts (Projektkontextmenü > Hinzufügen > Neues Element > Benutzersteuerelement). Das Steuerelement ist zu diesem Zeitpunkt noch leer. Wurzelelement des Benutzersteuerelements ist UserControl. Nun können wir dort alle mögliche andere Steuerelemente verschachteln (stets untergeordnet in einem Layout-Panel). Auf Grund des Konzepts der Objektorientierung können wir von einer fremden Klasse (z. B. dem Fenster, in welchem das Steuerelement angezeigt wird) nicht auf die Steuerelemente des Benutzersteuerelements zugreifen. Hierfür müssen wir (falls erforderlich) in der Code-Behind-Datei Eigenschaften und Funktionen implementieren. Wer versucht, das Benutzersteuerelement im Designer im XAML-Code hinzuzufügen, wird vorerst daran scheitern. Dies kommt daher, dass der Namensraum des eigenen Programms im XAML-Code noch nicht bekannt ist. Hierfür definieren wir einen eigenen XML-Namensraum mit Hilfe von xmlns:name (name ist frei wählbar). Als Wert des Attributs muss clr-namespace:Programm_Namensraum angegeben werden. Das Benutzersteuerelement kann nun über den Elementname name:Mein_Benutzersteuerelement eingebunden werden.

TextBoxClear.xaml

<UserControl x:Class="CSV20.WPF_Steuerelemente.TextBoxClear"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" d:DesignHeight="80" d:DesignWidth="300">
    <Grid>
        <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Name="labelBeschriftung" />
        <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Margin="150,15,0,0" Width="125" Name="textBoxInhalt" />
        <Button HorizontalAlignment="Left" VerticalAlignment="Top" Margin="150,45,0,0" Padding="3" Name="buttonLöschen" Content="Inhalt zurücksetzen" Click="buttonLöschen_Click" />
    </Grid>
</UserControl>

TextBoxClear.xaml.cs
using System.Windows;
using System.Windows.Controls;

namespace CSV20.WPF_Steuerelemente
{
    /// <summary>
    /// Interaktionslogik für TextBoxClear.xaml
    /// </summary>
    public partial class TextBoxClear : UserControl
    {
        public string Beschriftung
        {
            get
            {
                return labelBeschriftung.Content.ToString();
            }
            set
            {
                labelBeschriftung.Content = value;
            }
        }

        public string Text
        {
            get
            {
                return textBoxInhalt.Text;
            }
            set
            {
                textBoxInhalt.Text = value;
            }
        }

        public TextBoxClear()
        {
            InitializeComponent();
        }

        private void buttonLöschen_Click(object sender, RoutedEventArgs e)
        {
            textBoxInhalt.Text = "";
        }
    }
}

MainWindow.xaml
<Window x:Class="CSV20.WPF_Steuerelemente.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:o="clr-namespace:CSV20.WPF_Steuerelemente"
        Title="Benutzersteuerelemente" Height="200" Width="300" ResizeMode="NoResize">
    <Grid>
        <o:TextBoxClear HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,5,0,0" Beschriftung="Eingabe 1:" Text="Hallo Welt!" />
        <o:TextBoxClear HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,85,0,0" Beschriftung="Eingabe 2:" />
    </Grid>
</Window>
Download

LinksRechts