.
Anmeldung | Registrieren | Hilfe
in Suchen

XAML Elemente verschachteln

Letzter Beitrag 20. Dez 2010 10:07 von LearningDude. 4 Antworten.
Seite 1 von 1 (5 Treffer)
Beiträge sortieren: Zurück Weiter
  • 03. Dez 2010 11:20

    XAML Elemente verschachteln

    Hallo,

    Ich habe ein problem. Und zwar habe ich 4 Komponenten:
    - Die Hauptanwendung
    - Ein Panel, welches über die gesamte breite der anwendung angezeigt werden soll "FramePanel"
    - Ein Panel, welches eine box mit rahmen anbietet "BorderPanel"
    - Ein Diagramm "ProzessDiagramm"

    Das Diagramm ProzessDiagramm soll jetzt in dem BorderPanel, welches sich im FramePanel auf der Hauptanwendung befindet, angezeigt werden.

    Pseudocode:

    <Hauptanwendung>
       <FramePanel>
          <BorderPanel>
              <ProzessDiagramm/>
          </BorderPanel>
       </FramePanel>
    </Hauptanwendung>

    Dafür muss ich doch irgendwie in den jeweiligen komponenten FramePanel und BorderPanel einstellen, wo die untergeordneten dokumente eingefügt werden (sozusagen das inner-xaml).

    Wie mache ich das?

    Grüße,
    A Learning Dude

    • IP-Adresse ist Registriert
  • 03. Dez 2010 12:56 Antwort zu

    XAML Elemente verschachteln

    Okay, mal etwas einfacher und genauer:

    Ich will meine Komponente glassPanel mit der Komponente Diagramme füllen.
    Das problem ist nur, wenn ich das glasspanel einzelnd da habe, so:

    <my1:iSM_glassPanel Width="300" Height="200">
    </my1:iSM_glassPanel>

    Dann sieht das so aus:


    Und wenn ich die Komponente Prozesse so einfüge:
    <my1:iSM_glassPanel Width="300" Height="200">
       <my2:iSM_Prozesse />
    </my1:iSM_glassPanel>

    Sieht das so aus:


    Das Diagramm soll aber in dem glasspanel angezeigt werden und dieses nicht ersetzen. Also denk ich mir, dass man irgendwo in einer komponente mal ein bestimmtes tag ablegen muss, an dessen stelle dann die kinder eingefügt werden können, oder?
    Nur: Wie geht das? Und vor allem: Warum ist so etwas grundlegend logisches nicht bei den ersten tutorials erklärt worden?

    • IP-Adresse ist Registriert
  • 17. Dez 2010 14:16 Antwort zu

    XAML Elemente verschachteln

    Hallo!

    Auf dieser Seite gibt es ein kleines super Tutorial, das mich schon fast bis zum glück geführt hat:

    http://www.silverlight-community.de/2010/12/contentplatzhalter-in-usercontrols/

    Leider funktioniert das nicht ganz. Wenn ich alles gemacht habe was in dem Tut steht und dann in der Komponente Content platziere (und zwar ohne die komponente selber anzufassen, wie es ja der sinn in bei dieser technik ist), erscheint dieser nicht.

    Hier ist mein code:

    <UserControl x:Class="embedding.comp.UserControl1"
        xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation</a>"
        xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xaml">http://schemas.microsoft.com/winfx/2006/xaml</a>"
        xmlns:d="<a href="http://schemas.microsoft.com/expression/blend/2008">http://schemas.microsoft.com/expression/blend/2008</a>"
        xmlns:mc="<a href="http://schemas.openxmlformats.org/markup-compatibility/2006">http://schemas.openxmlformats.org/markup-compatibility/2006</a>"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
        
            <Canvas x:Name="LayoutRoot">
                <Canvas.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="#FF286607"/>
                        <GradientStop Color="#FF6DF125" Offset="1"/>
                    </LinearGradientBrush>
                </Canvas.Background>
    
    
                <Rectangle Fill="#FFF4F4F5" Stroke="Black" Height="25" Width="154" Canvas.Left="26" Canvas.Top="20" />
                <Button Content="Irgendeine Aktion" Canvas.Left="26" Canvas.Top="49" />
                <ContentControl Content="{Binding NewContent, ElementName=userControl}" Canvas.Left="51" Canvas.Top="75" Width="120" Height="60" />
                <TextBlock Canvas.Left="8" TextWrapping="Wrap" Text="Unten" Canvas.Top="148" Foreground="#FFF93E3E"/>
                <TextBlock Canvas.Left="8" TextWrapping="Wrap" Text="Oben" Foreground="#FFF93E3E"/>
                <TextBlock Canvas.Left="-7" TextWrapping="Wrap" Text="Links" Foreground="#FFF93E3E" Canvas.Top="69">
             <TextBlock.Projection>
              <PlaneProjection RotationZ="90"/>
             </TextBlock.Projection>
                </TextBlock>
                <TextBlock Canvas.Left="194" TextWrapping="Wrap" Text="Rechts" Foreground="#FFF93E3E" Canvas.Top="69">
             <TextBlock.Projection>
              <PlaneProjection RotationZ="90"/>
             </TextBlock.Projection>
                </TextBlock>
            </Canvas>
    </UserControl>

    Codebehind:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Markup;
    
    
    namespace embedding.comp
    {
        [ContentProperty("NewContent")]
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
    
    
            public UIElement NewContent
            {
                get { return (UIElement)GetValue(NewContentProperty); }
                set { SetValue(NewContentProperty, value); }
            }
    
    
            public static readonly DependencyProperty NewContentProperty =
                DependencyProperty.Register("NewContent", typeof(UIElement), typeof(UserControl1), null);
        }
    }

    Soweit ist doch alles richtig oder?
    Nur eine sache fällt mir ein die auf ein problem hindeuten konnte. Als ich über der Klasse im Codebehind Block [ContentProperty("NewContent")] hinzugefügt hatte, musste ich ContentProperty erst auflösen, damit das ganze funktionierte. Das ding wurde dann in System.Windows.Markup gefunden.

    Ist das eigentlich richtig so?

    Ich hoffe ihr könnt mir helfen :)

    Grüße,

    A Learning Dude

    • IP-Adresse ist Registriert
  • 17. Dez 2010 19:29 Antwort zu

    • Lars Schmitt
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 22. Jan 2008
    • Witten
    • Beiträge 322
    • Punkte 5.275
    • Moderator

    XAML Elemente verschachteln

    Antworten
    hallo LearningDude,

    das Usercontrol hat ja gar kein namen, jedoch wird der ElementName
    usercontrol benutzt

    Viele Grüße
    Lars
    • IP-Adresse ist Registriert
  • 20. Dez 2010 10:07 Antwort zu

    XAML Elemente verschachteln

    Okay, das war das problem.
    Jetzt funktioniert es. Danke!

    • IP-Adresse ist Registriert
Seite 1 von 1 (5 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum