none
Popup in ein anderes XAML File auslagern RRS feed

  • Frage

  • Hallo Forum,

    ich habe einen Windows Dialog in dem ich mehrere Popup's verwende. Meine Frage nun, kann ich die Popup's auch in ein eigenes XAML File auslagern. Mir wird der XAML Code in dem Window langsam etwas unübersichtlich. Die TextBoxen/Listboxen des Popup werden über den DataContext des Window mit Daten versorgt. Dies soll natürlich erhalten bleiben. 

    Danke und Gruß
    Gerhard

    Donnerstag, 15. September 2016 18:02

Alle Antworten

  • Hallo Gerhard,

    das einfachste dürfte ein UserControl sein. Ein solches kannst du einfach über "Element hinzufügen" im Visual Studio im Projekt einfügen. Damit bekommst du eine eigene XAML und C# Datei. Dort hinein kannst du dann alles auslagern wie du willst. Im Anschluss daran kannst du das UserControl einfach in deinem Popup verwenden.

    Was ich nicht ausprobiert habe, was aber funktionieren könnte, ist statt von UserControl abzuleiten direkt von Popup abzuleiten. Anschließend müsstest du trotzdem den Inhalt in der XAML Datei einfügen können und im eigentlichen Window brauchst du nur noch dein "User-Popup" einzufügen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Donnerstag, 15. September 2016 19:57
    Moderator
  • Hallo Tom,

    Erstmal danke für Deine Nachricht. Ganz so einfacht ist das wohl nicht. Ein UserControl kann nicht von Popup ableiten. So habe ich nun ein UserControl gebaut, das über das Popup aufgerufen wird. Nun habe ich aber das Problem, das das UserControl nichts mit dem DataContext von meinem ViewModel anfangen kann. Der Vorteil von einem Popup ist ja, das ich den selben DataContext verwenden kann. Wie bekomme ich nun den DataContext von meinem Window 1:1 in das UserControl.

    <Popup AllowsTransparency="True"
            HorizontalOffset="150"
            IsOpen="{Binding Path=IsVisibilityPopup,
                            UpdateSourceTrigger=PropertyChanged}"
            Placement="Relative"
            PlacementTarget="{Binding ElementName=AddItem}"
            PopupAnimation="Fade"
            StaysOpen="False"
            VerticalOffset="70"
            Visibility="Visible">
        <Border Background="White">
           <control:AddItemPopup DataContext="{Binding Path=DataContext}" />
         </Border>
    </Popup>
    
    Danke und Gruß
    Gerhard

    Freitag, 16. September 2016 12:54
  • Hallo Gerhard, Hallo Tom,

    Es geht auch mit der Ableitung von Popup.

    Aber ist das sinnvoll? Ein UserControl kann man überall verwenden, ein Popup ist nun mal ein Popup und kann nur als solches verwendet werden.

    Hier trotzdem die Popup-Lösung:

    MyPopup.xaml

    <Popup x:Class="CheckableTreeView.View.Wpf.MyPopup"
           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" 
           xmlns:local="clr-namespace:CheckableTreeView.View.Wpf"
           mc:Ignorable="d" 
           d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
                
        </Grid>
    </Popup>
    

    MyPopup.xaml.cs

    using System.Windows.Controls.Primitives;
    
    namespace CheckableTreeView.View.Wpf
    {
        /// <summary>
        /// Interaktionslogik für MyPopup.xaml
        /// </summary>
        public partial class MyPopup : Popup
        {
            public MyPopup()
            {
                InitializeComponent();
            }
        }
    }
    

    Donnerstag, 27. April 2017 10:50