So wenden Sie einen Stil auf ein DependencyObject in einer benutzerdefinierten Steuerelementbibliothek an

8

Ich erstelle ein wiederverwendbares benutzerdefiniertes Steuerelement basierend auf der TreeView. Ich habe auf dem benutzerdefinierten Steuerelement eine Abhängigkeitseigenschaft für die Spalten im Steuerelement wie folgt erstellt:

%Vor%

Damit kann ich eine Reihe von Spalten in XAML angeben. Der Catch ist, dass ich die erste Spalte brauche, um eine benutzerdefinierte Zellenvorlage zu haben. Ich wollte das erreichen, indem ich eine Klasse von GridViewColumn ableitete, etwa so:

%Vor%

und geben Sie dann den gewünschten Stil in der Generic.xaml für das benutzerdefinierte Steuerelement:

%Vor%

Der Stil wird jedoch niemals auf Instanzen von TreeGridViewColumn angewendet. Ich weiß, dass ich wahrscheinlich hinzufügen muss:

%Vor%

Allerdings kann ich dies nicht tun, da die GridColumn-Basisklasse kein FrameworkObject ist, sondern ein DependencyObject. Wie kann ich einen Stil auf einen Nachkommen einer GridViewColumn anwenden, der in einer Custom Control-Bibliothek definiert ist?

    
user3690202 20.01.2016, 01:21
quelle

1 Antwort

1

Stellen Sie sich Folgendes vor: Die TreeGridViewColumn sollte ein Dummy-Objekt sein, das wichtige Informationen für die Spalte selbst enthält, z. B. Breite und Höhe, sowie für jede Zelle unter diesem Spaltenkopf, z. B. die Zellenvorlage selbst. Versuchen Sie daher nicht, ein FrameworkElement aus TreeGridViewColumn zu erstellen. Hier ist ein Beispiel, wie Sie am Ende die TreeGridViewColumn verwenden könnten.

%Vor%

Sobald Sie bereit sind, die Spalten und Zellen anzuzeigen, schlage ich Ihnen vor, Ihr eigenes benutzerdefiniertes Panel zu schreiben, das sich mit den FrameworkElements beschäftigt, indem Sie ihre Measure- und Arrange-Methoden aufrufen, um Spalten und Zellen nach Ihren Wünschen zu positionieren. Sie werden am Ende viel Mathe in Ihrer benutzerdefinierten Panel-Klasse tun. Das bedeutet, dass Sie am Ende einen Monat damit verbringen werden, dieses TreeGridView zu programmieren. Ich empfehle Ihnen, eine Abkürzung zu nehmen und den Code einer solchen Sache herunterzuladen. Es gibt bereits wenige TreeListViews online. Nimm einfach ihre dlls und schau, ob es für dich klappt

BEARBEITEN:

Ok, hier ist ein Vorschlag, wie Sie Ihr Problem lösen könnten. Es ist nur ein Vorschlag

Die DefaultTextColumnData-Klasse ist ein Dummy-Objekt, das alle notwendigen Informationen wie Spaltenbreite usw. enthält.

DataGridCellControl ist das FrameworkElement, das die Zelle zeichnet. Es ist ein FrameworkElement, so dass es einen definierten Stil in Ihrem generic.xaml Ressourcenwörterbuch hat.

Zusammenfassend wird DefaultTextColumnData alle Informationen für die Spalte selbst enthalten. DataGridCellControl wird ein Steuerelement sein, das am Ende 20 Instanzen von sich selbst haben kann, wenn Sie 20 Zellen in dieser Spalte haben.

DataGridCellControl muss über seine Spalte wissen. So sieht der Code von DataGridCellControl ähnlich aus:

%Vor%

DefaultTextCellTemplate wird in Ihrer generic.xaml wie folgt gesetzt:

%Vor%

So legen Sie die Standardzellenvorlage in Ihrem Ressourcenverzeichnis fest.

    
dev hedgehog 28.01.2016 09:13
quelle

Tags und Links