WPF custom control und direct-Inhalte unterstützen
Ich bin ziemlich neu in WPF, und bin ein wenig stecken, so dass jede Hilfe wäre sehr geschätzt.
Ich bin versucht, zu schreiben WPF custom control kapselt mehrere Elemente der Funktionalität, die ich bereits mit arbeiten (ich.e Sortieren, filtern, standard-Menüs, etc.), aber in einem netten ordentlichen Paket, um Wiederholungen zu vermeiden.
Jedenfalls habe ich erstellt das benutzerdefinierte Steuerelement (bezogen auf die Kontrolle), und dann haben Sie die folgenden in das Allgemeine.Xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Controls.ListViewExtended">
<Style TargetType="{x:Type local:ListViewExtended}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ListViewExtended}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ListView>
<ListView.View>
<GridView>
<!-- Content goes here -->
</GridView>
</ListView.View>
</ListView>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Wenn ich versuche, um GridViewColumns (oder Kontrolle wirklich), wie unten ...
<elv:ListViewExtended>
<GridView>
<GridViewColumn Width="140" Header="Column 1" />
<GridViewColumn Width="140" Header="Column 2" />
<GridViewColumn Width="140" Header="Column 3" />
</GridView>
</elv:ListViewExtended>
Bekomme ich die "... unterstützt keine direkten Inhalte" Fehler.
Habe ich eine Abhängigkeit Eigenschaft (wieder unten), die ermöglicht das hinzufügen von GridView, aber es funktioniert immer noch nicht.
public static DependencyProperty GridViewProperty;
public static string GridViewHeader(DependencyObject target)
{
return (string)target.GetValue(GridViewProperty);
}
public static void GridViewHeader(DependencyObject target, string value)
{
target.SetValue(GridViewProperty, value);
}
Vielen Dank im Voraus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erben Ihr benutzerdefiniertes Steuerelement aus der
ListView
, nicht von derControl
. Dies würde definitiv dazu führen, dass Sie die Vorlage ändern, aber ich ermutige Sie, um mehr zu Lesen Dokumentation, wie es zu tun (z.B. Sacha Barber ' s Artikel: Erstellen und verwenden einer benutzerdefinierten WPF-Steuerelement).Glück beim lernen!
Alles, was Sie brauchen, ist, um anzugeben, ContentPropertyAttribute.
Referenz: http://msdn.microsoft.com/en-us/library/system.windows.markup.contentpropertyattribute(v=vs. 90).aspx
Ich mit dieser einfachen Lösung, die in unseren Projekten zur Unterstützung von direct-Inhalte in benutzerdefinierten Steuerelementen:
Hinzufügen "CustomControl", um Ihr Projekt und leiten Sie dieses Steuerelement aus der Klasse "UserControl" anstelle von "Kontrolle":
Wenn Sie fügen Sie ein CustomControl zu Ihrem Projekt Visual Studio (ich verwende 2012) fügt automatisch einen Ordner "Themen", darunter auch eine Datei namens "Generic.xaml".
Diese Datei enthält ein ResourceDictionary definieren der style (template) Ihrer CustomControl.
Finden Sie eine grundlegende Vorlage für Ihre CustomControl, schon als DefaultStyle. Für die direkte inhaltliche Unterstützung Ort ein ContentPresenter irgendwo in dieser Vorlage mit den übergeordneten Inhalt verbindlich:
Es ist nun möglich, Inhalte hinzufügen, um Ihre CustomControl:
Hoffe, das hilft!