Laden...

BaseWindow mit 2 ContentPresenter

Erstellt von Coooder vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.146 Views
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren
BaseWindow mit 2 ContentPresenter

Hallo Leute!

Ich möchte mir eine BaseWindow Klasse erstellen um eben alle Fenster der Anwendung davon ableiten zu lassen. Das Fenster soll in 2 Teile aufgeteilt werden. Oben ein Menü und unten der Content.
Überlegt hab ich mir, das mit 2 ContentPresenter im ControlTemplate umzusetzten.
Allerdings bin ich mir nich so sicher wie meine nächsten schirtte aussehen müssten dafür. Aus den google ergebnissen wurde ich nur teilweise schlau drauß.

Hier erstmal das was ich bereits habe:

Application Resources

<Style x:Key="MyWindow" TargetType="cl:BaseWindow">
            <Setter Property="WindowStyle" Value="None" />
            <Setter Property="ResizeMode" Value="CanResizeWithGrip" />
            <Setter Property="AllowsTransparency" Value="True" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Window">
                        <Border BorderBrush="DarkGray" BorderThickness="1" Background="White">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>

                                <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" />
                                <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="1" />

                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Wie man sieht hab ich hier erstmal ganz Stumpf 2 Contentpresenter nebeneinander ...

MainWindow.xaml

<cl:BaseWindow x:Class="Client.MainWindow"
        xmlns:cl="clr-namespace:Client"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Style="{DynamicResource MyWindow}">
    
    <Grid>
        
    </Grid>
    
</cl:BaseWindow>

Hier liegt das Grid im 2ten ContentPresenter...
BaseWindow selbst is noch Komplett leer und leitet nur vin Window im moment ab.

Ich bin mir nich ganz sicher ob ich für mein Vorhaben überhaupt eine BaseWindow brauche ... es "fühlt" sich aber so an =D

Kurz gefragt ... wie könnt ich jetzt weiter vorgehen damit ich 2 ContentPresenter nutzen kann?
Oder is der Ansatz ansich schon nich Empfehlenswert? Freue mich über eure Antworten.

5.299 Beiträge seit 2008
vor 8 Jahren

ich sehe noch keinen Gewinn darin.
Derzeit hast du ein Window ohne Inhalt, und einen Style mit Inhalt. Und dem Window ohne Inhalt gibst du den Style mit Inhalt, damit das Window ohne Inhalt dochn Inhalt hat.

Aber warum nicht gleich den Inhalt ins Window machen?

die ContentPresenter selbst sind flexibel genug um alle Arten von Controls und UserControls und DataTemplates anzuzeigen.

Der frühe Apfel fängt den Wurm.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren

Der Inhalt des Windows kommt ja noch ...
Und der Style mit dem ControlTemplate is halt dafür, dass ich das nich in jedem Fenster neu machen muss.

Ich will mir also ein BaseWindow bauen das im prinziep so funktioniert/aussieht:


<cl:BaseWindow x:Class="Client.MainWindow"
        xmlns:cl="clr-namespace:Client"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Style="{DynamicResource MyWindow}">

<NaviLeiste>
\*Diverser Content*
</NaviLeiste>

<WindowContent>
\*Diverser Content*
</WindowContent>

</cl:BaseWindow>

Is das so in etwa möglich?

R
228 Beiträge seit 2013
vor 8 Jahren

Ich verstehe dich so, dass die Navi-Leiste immer sichtbar ist und du je nach ausgewähltem Item aus deiner Navi-Leiste die Ansicht rechts neben deinem Menü anpassen möchtest.

Falls ja, sollte/könnte deine Navi-Leiste eine Liste von ViewModels haben. Per Datatemplate "erklärst" du der UI wie das selektierte ViewModel gerendert werden muss --> hier gibst du dein spezifisches UserControl an. Dein contentcontrol bindest du dann an das selektierte ViewModel aus deiner Navi-Leiste. Je nach ausgewähltem Item ändert sich nun die UI.

5.299 Beiträge seit 2008
vor 8 Jahren

Inhalt kann eiglich nicht mehr kommen, denn wenn dein Style ein Template zuweist, ist der Inhalt, der vorher da war, futsch.

Der frühe Apfel fängt den Wurm.

F
10.010 Beiträge seit 2004
vor 8 Jahren

Und bei Vererbung von Controls in WPF kann nur eine Ebene XAML benutzen.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren

@Rioma genau so hab ich das vor, nur das ich das nich bei jedem Fenster der Anwendung immer wieder neu machen wollte ^^

F
10.010 Beiträge seit 2004
vor 8 Jahren

Naja, du müsstest auch nur ein solches Fenster machen und dadrin nur den Content austauschen.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren

Ahhh Hirngrütze gestern abend gehabt sry ... Ich kann ja das Fenster sowieso schon wiederverwerten ^^

Danke euch