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
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>
|