ContentPresenter in UserControl
Ich bin neu in WPF und ich bin versucht, erstellen Sie ein Benutzersteuerelement, das haben einige verschachtelte Inhalte.
<my:InformationBox Header="General Information" Width="280">
<StackPanel>
<Label>Label1</Label>
<Label>Label2</Label>
</StackPanel>
</my:InformationBox>
Wie Sie sehen können ich möchte ein StackPanel in es. Wie ich Lesen Sie einige Artikel, die ich sollte hinzufügen ContentPresenter zu meinem UserControl, das Tat ich auch, aber ich kann nicht finden, was sollte werden gebunden, um es der Content-Eigenschaft.
Hier ist mein UserControl-code
<UserControl x:Class="ITMAN.InformationBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="280" Name="infoBox" Loaded="infoBox_Loaded">
<StackPanel Width="{Binding ElementName=infoBox, Path=Width}" HorizontalAlignment="Stretch">
<Label Content="{Binding ElementName=infoBox, Path=Header}" />
<Border BorderThickness="0,1,0,0" Padding="10 5" Margin="5 0 5 10" BorderBrush="#B4CEDE">
<StackPanel>
<ContentPresenter Content="{Binding Content}" />
<Label Content="End" />
</StackPanel>
</Border>
</StackPanel>
</UserControl>
Ich habe versucht, so viele Kombinationen aus den verschiedenen Artikeln, aber ich finde keine Beispiel arbeiten, was ich erreichen will.
Ähnliche Frage wurde bereits früher von einem anderen user, aber da gibt es Antworten, hat mir nicht helfen: Hat jemand ein einfaches Beispiel für ein UserControl mit einem einzigen ContentPresenter?
- Soweit ich informiert bin, werden Benutzer-Steuerelemente nicht ein
Content
Eigenschaft. AuchContentPresenter
s sind in der Regel nur in den Vorlagen verwendet werden. Ich denke, was Sie tun müssen, ist, erstellen Sie ein benutzerdefiniertes Steuerelement mit einer AbhängigkeitseigenschaftContent
und eine Standard-Vorlage, legt Ihre Steuern, wie Sie es mit der Kontrolle durch die Nutzer. – Es könnte möglich sein, fügen Sie die DP auf die Benutzer-Steuerelement-Klasse statt; Sie müssten eineContentControl
dann aber. - Ja, Sie brauchen, um hinzuzufügen, abhängigkeitseigenschaften zu Ihrem Benutzersteuerelement. Check this out codeproject.com/Articles/224230/...
- ein Benutzer-Steuerelement ist ein ContentControl, daher ein ContentPresenter ist in der Tat nutzbar.
- Aber ist es nicht auch ein content-Steuerelement, so dass Sie bauen können eine benutzerdefinierte user-control mit content? Ist die daraus resultierende Kontrolle, die Sie erstellen es, eine inhaltliche Kontrolle als gut?
- ein UserControl leitet sich von ContentControl. Der xaml-Teil ist seine ControlTemplate. So können Sie bauen, Benutzersteuerelemente, die nutzen nicht die Inhalte, aber wenn Sie es verwenden möchten, müssen Sie den ContentPresenter.
- Ah, ich sehe! Vielen Dank 🙂
- ich muss mich entschuldigen, scheint, dass ich falsch war. Das ist aber nicht die Vorlage Ihrer definieren Sie in xaml ist es ja Ihr Inhalt ist. Sehen user1537441 Antwort. Einer der Gründe, warum ich nicht verwenden, Benutzersteuerelemente überhaupt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löste ich dieses problem durch applaying benutzerdefinierten Stil zu
GroupBox
. Ich habe Syle inResourceDictionary
, die wie folgt aussiehtAngewendet und dieser Stil
GroupBox
Dieser code wie erwartet funktioniert
Finden Sie in diesem tollen Artikel, der zeigt, verschiedene Möglichkeiten, es zu erreichen:
http://www.codeproject.com/Articles/82464/How-to-Embed-Arbitrary-Content-in-a-WPF-Control
Es beschreibt auch, warum
ContentPresenter
funktioniert nicht in meinem code.ContentPresenter
ist eine Art Magie die Kontrolle. Wenn Sie nicht liefern alles, es wird automatisch dieContent
,ContentTemplate
undContentTemplateSelector
Eigenschaft mit einemTemplateBinding
zu den TemplatedParent. Das heißt, Sie brauchen nicht zu liefern, nichts, nurin Ihrem UserControl, und es sollte automatisch die entsprechenden Eigenschaften in deinem UserControl.
Denken Sie auch daran, dass eine so verbindlich ist wie
{Binding Content}
immer referes zu DataContext, ich glaube, das ist nicht das, was Sie wollte.m writing
Content={Binding ElementName=infoBox, Path=Content}` mein Visual Studio 2010 zermalmt jedes mal, wenn ich bin, es zu tunMüssen Sie erstellen eine Abhängigkeitseigenschaft auf Ihrem UserControl-code hinter wie InnerContent.
Dann müssen Sie zu binden, dass InnerContent auf der XAML Seite des UserControl.
Dann, wenn Sie es verwenden anstelle der Einstellung von Inhalten in das UserControl direkt und überschreiben Sie die vorhandene Inhalte, fügen Sie ihn einfach in der InnerContent Teil.
Ansonsten mit einem Template oder Style ist genauso gut, aber wenn Sie wollen, sind zu Verpacken, die ein Benutzersteuerelement für die Verwendung, ohne dass jemand auch auf einen Stil oder eine Vorlage, das ist wahrscheinlich eine der besseren Optionen.