Ich bin neu bei WPF und versuche ein UserControl zu erstellen, das etwas verschachtelten Inhalt haben wird.
%Vor%Wie Sie sehen können, möchte ich ein StackPanel einbauen. Während ich einige Artikel lese, sollte ich ContentPresenter zu meinem UserControl hinzufügen, also tat ich es, aber ich kann nicht finden, was mit seiner Content-Eigenschaft verknüpft werden sollte.
Hier ist mein UserControl-Code
%Vor%Ich habe viele Kombinationen aus verschiedenen Artikeln ausprobiert, aber ich kann kein funktionierendes Beispiel dafür finden, was ich erreichen möchte.
Eine ähnliche Frage wurde früher von einem anderen Benutzer gestellt, aber die Antworten haben mir nicht geholfen: Hat jemand ein einfaches Beispiel für ein UserControl mit einem einzigen ContentPresenter?
Ich habe dieses Problem gelöst, indem ich den benutzerdefinierten Stil auf GroupBox
angewendet habe. Ich habe Syle in ResourceDictionary
erstellt, was wie folgt aussieht
Und diesen Stil auf GroupBox
Dieser Code funktioniert wie erwartet
Sie können sich auch auf diesen großartigen Artikel beziehen, der verschiedene Optionen zeigt, um dies zu erreichen:
Ссылка
Es beschreibt auch, warum ContentPresenter
in meinem Code nicht funktioniert.
ContentPresenter
ist eine Art magische Kontrolle. Wenn Sie nichts angeben, wird automatisch die Eigenschaft Content
, ContentTemplate
und ContentTemplateSelector
mit einem TemplateBinding
auf das TemplatedParent gesetzt. Was bedeutet, dass Sie nichts liefern müssen, nur
in Ihrem UserControl, und es sollte automatisch die entsprechenden Eigenschaften in Ihrem UserControl verwenden.
Denken Sie auch daran, dass eine Bindung wie {Binding Content}
sich immer auf Ihren DataContext bezieht, was vermutlich nicht das ist, was Sie wollten.
Sie müssen eine Abhängigkeitseigenschaft für Ihren UserControl-Code wie InnerContent erstellen.
%Vor%Dann müssen Sie an diesen InnerContent auf der XAML-Seite dieses Benutzersteuerelements binden.
%Vor%Wenn Sie es dann verwenden, anstatt Inhalt direkt in UserControl zu platzieren und den vorhandenen Inhalt zu überschreiben, fügen Sie ihn einfach zum InnerContent-Teil hinzu.
%Vor%Ansonsten ist die Verwendung eines Templates oder Styles genauso gut, aber wenn Sie ein UserControl für die Verwendung zusammenpacken möchten, ohne dass jemand einen Style oder eine Vorlage referenzieren muss, ist dies wahrscheinlich eine Ihrer besseren Optionen.
Tags und Links wpf c# xaml contentpresenter