WPF : Auswahl-Fenter öffnen und wert übernehme mit Button Elements
Dieses Beispiel zeigt, wir ein WPF Element eine Auswahl als Fenster öffnet und hieraus einen Auswahl getroffen wird.
Dabei fügt die Auswahl anschliessend ein Button in das Innere des ersten Aufrufers
Aufruf Popup
Das Window wird über ein new Window(..) erstellt und angezeigt.
Der Trick dabei ist, dass als Window(argument) der Aufrufer übergeben wird.
private void Panel_row_1_col_1_MouseUp(object sender, MouseButtonEventArgs e) { Border panel = sender as Border; Window_Select popup = new Window_Select(panel); popup.ShowDialog(); }
|
Aufruf
Trick im Popup-Window
Der Trick dabei ist, dass im Window welches aufgerufen wird, eine gleichnamige Aufruf-Methode() erstellt wird, welche als Parameter ein WPF Element enthält.
Dadurch kann man schon beim Erstellen einse Window einen Parameter mitgeben
public Window_Select(Border srcPanel) { //< get caller_Element > _srcPanel = srcPanel; //</ get caller_Element >
InitializeComponent(); }
|
Auswahl übernehmen
Wenn die Auswahl ausgewählt wurde, dann wird direkt das im Speicher festgehaltene Aufruf-Element angesprochen.
Da das aufrufende Element wie hier ein Border-Element als Windows(Source Argument) übernommen wurde, kann es hier verwendet werden.
Hier wird in das Element mit .Child in das aufrufende Element ein Button gelegt.
Button btn = new Button(); btn.Background = new SolidColorBrush(Colors.Green);
_srcPanel.Child = btn;
|
Anschliessend wird das Fenster geschlossen
this.Close(); |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes;
namespace Demo_InsertElement { /// <summary> /// Interaction logic for Window_Select.xaml /// </summary> public partial class Window_Select : Window { private Border _srcPanel;
#region Form //=============< region: Form >============= public Window_Select(Border srcPanel) { //< get caller_Element > _srcPanel = srcPanel; //</ get caller_Element >
InitializeComponent(); } //=============</ region: Form >============= #endregion
#region Buttons //=============< region: Buttons >============= private void BtnRed_Click(object sender, RoutedEventArgs e) { //------------< BtnRed_Click() >------------ //< create element > Button btn = new Button(); btn.Background = new SolidColorBrush(Colors.Red); //</ create element >
//< element into caller > //*adds a new element into the caller _srcPanel.Child = btn; //</ element into caller >
//< close > this.Close(); //</ close > //------------</ BtnRed_Click() >------------ }
private void BtnGreen_Click(object sender, RoutedEventArgs e) { Button btn = new Button(); btn.Background = new SolidColorBrush(Colors.Green); _srcPanel.Child = btn; this.Close(); } //=============</ region: Buttons >============= #endregion } }
|
XAML
Basis-Fenster
Das Basis-Fenster, welches ein Popup Fenster als Auswahl öffnet.
In diesem Fall soll das rote Rechteck vom Typ Border ein Fenster öffnen.
Wenn das Auswahl-Fenster geöffnet wurde, dann soll ein Button als Element in das Border-Element hineingelegt werden. Das gleiche kann natürlich auch für ander WPF Elemente erstellt werden.
Wichtig ist: dass ein Aufrufer-Element ein Auswahl-Fenster öffnet
<Window x:Class="Demo_InsertElement.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Demo_InsertElement" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="186*"/> <ColumnDefinition Width="53*"/> <ColumnDefinition Width="555*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="98*"/> <RowDefinition Height="52*"/> <RowDefinition Height="269*"/> </Grid.RowDefinitions> <Border x:Name="panel_row_1_col_1" BorderBrush="Red" BorderThickness="1" Margin="2" Grid.Row="1" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseUp="Panel_row_1_col_1_MouseUp" Background="#f0f0f0" />
</Grid> </Window>
|
Das Popup-Window
Als Auswahlfenster für Daten
Im Aufruf-Window wird hier ein Button ausgewählt.
Wichtig ist, dass dadurch ein Event ausgelöst wird, welcher eine Auswahl
darstellt und damit der Wert an den WPF Aufrufer zurück gegeben werden kann.
<Window x:Class="Demo_InsertElement.Window_Select" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Demo_InsertElement" mc:Ignorable="d" Title="Window_Select" Height="450" Width="800"> <Grid> <Label Content="Select a Button" HorizontalAlignment="Left" Height="46" Margin="44,26,0,0" VerticalAlignment="Top" Width="257"/> <Button x:Name="BtnRed" Content="Red" Height="51" Margin="64,69,0,0" Width="89" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Red" Click="BtnRed_Click"/> <Button x:Name="BtnGreen" Content="Green" Height="51" Margin="65,133,0,0" Width="89" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Green" Click="BtnGreen_Click"/>
</Grid> </Window>
|