Laden...

Forenbeiträge von mortifiedpenguin Ingesamt 2 Beiträge

01.09.2021 - 10:15 Uhr

Danke schonmal für die Antwort. Was ist denn normalerweise die Lösung für dieses Problem? Gehe ich das vielleicht komplett falsch an?

In dem gennanten Beispiel konnte ich die Duplizierung über ein ControlTemplate für ContentControl eliminieren. Was aber natürlich bedeutet, dass ich dort nicht an die Dependency-Properties des Windows binden kann 🙁


    <ControlTemplate TargetType="{x:Type ContentControl}" x:Key="windowContentTemplate">
        <Border BorderBrush="Red" BorderThickness="3">
            <ContentPresenter />
        </Border>
    </ControlTemplate>
    
    <Style x:Key="windowStyle" 
           TargetType="{x:Type Window}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <ContentControl Template="{StaticResource windowContentTemplate}">
                        <ContentPresenter />
                    </ContentControl>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    <Style x:Key="customWindowStyle" 
           BasedOn="{StaticResource windowStyle}" 
           TargetType="{x:Type local:CustomWindow}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomWindow}">
                    <ContentControl Template="{StaticResource windowContentTemplate}">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>

                            <Image Grid.Column="0" Source="{TemplateBinding Source}" />
                            <ContentPresenter Grid.Column="1" />
                        </Grid>
                    </ContentControl>
                </ControlTemplate>

            </Setter.Value>
        </Setter>
    </Style>

31.08.2021 - 10:09 Uhr

Hallo zusammen!

Ich habe einen Style für ein Window erstellt, so weit, so gut:


<Style x:Key="windowStyle" 
       TargetType="{x:Type Window}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Window}">
                <Border Width="300" Height="300" BorderBrush="Red" BorderThickness="3">
                    <ContentPresenter />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Nun will ich ein spezialisiertes Window für bestimmte Anwendungszwecke, dazu vererbe ich von Window mit einem neuen DependencyProperty und erstelle dazu einen neuen Style. Im Prinzip will ich die Struktur vom Template im Base-Style behalten, und nur den ContentPresenter mit einem Grid füllen, welcher wiederum dann in einer Zelle den Window-Content zeigt:


    <Style x:Key="customWindowStyle" 
           BasedOn="{StaticResource windowStyle}" 
           TargetType="{x:Type local:CustomWindow}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomWindow}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <Image Grid.Column="0" Source="{TemplateBinding Source}" />
                        <ContentPresenter Grid.Column="1" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Dieser Style überschreibt allerdings natürlich komplett das ControlTemplate von Window, d.h. ich müsste das Template aus dem Basisstyle nochmal komplett kopieren.

Gibt es eine elegante Lösung dafür?

Ich könnte natürlich den ContentPresenter-Teil in ein DataTemplate auslagern, dann wäre ich aber für meinen customWindowStyle an ein bestimmtes ViewModel gebunden. Ich wollte eigentlich eine separate Window-Klasse mit eigenen Dependency-Properties.

Danke!