3 Stimmen

WPF: Erben von HeaderedContentControl

Ich möchte ein einfaches Steuerelement erstellen, das von HeaderedContentControl erbt und einige grundlegende Abhängigkeitseigenschaften namens Title, Subtitle, Icon hat. Ich möchte eine Standard-Kopfzeilenvorlage bereitstellen können, die diese Eigenschaften abfragt. Für dieses Beispiel habe ich diese Klasse HeaderedView genannt.

Ich habe Probleme bei der Bereitstellung einer Standard-Header-Vorlage, die zu den Eigenschaften auf dem HeaderedView definiert binden kann. Ich experimentiere mit Markup wie das folgende:

<Style TargetType="{x:Type local:HeaderedView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type HeaderedContentControl}">
                <StackPanel>
                    <Grid>
                        <ContentPresenter ContentSource="Header"/>
                    </Grid>
                    <Grid>
                        <ContentPresenter ContentSource="Content"/>
                    </Grid>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{TemplateBinding local:HeaderedView.Title}" />
                </Grid>                    
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

Leider wird der Titel nicht angezeigt.

Die Kopfzeilenvorlage muss austauschbar sein (weshalb ich das HeaderedContentControl verwenden möchte).

Jedes Mal, wenn ich scheinen zu wollen, von diesem Steuerelement zu erben, scheine ich mit der Implementierung zu kämpfen. Jede Hilfe würde sehr geschätzt werden!

5voto

mjeanes Punkte 1576

In Ihrer Vorlage verwenden Sie einen ContentPresenter, um die Kopfzeile anzuzeigen, aber Sie teilen dem ContentPresenter nicht mit, dass er das HeaderTemplate verwenden muss. Sie sollten in der Lage sein, dies zu tun, um Ihr benutzerdefiniertes HeaderTemplate angewendet zu sehen:

<ContentPresenter ContentSource="Header" ContentTemplate="{TemplateBinding HeaderTemplate}" />

Wenn Sie nur das HeaderTemplate ändern wollen, brauchen Sie die Vorlage nicht zu überschreiben. Das standardmäßige HeaderedContentControl wird Ihr HeaderTemplate entsprechend anwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X