2016-04-08 5 views
0

In der XAML für dieses Fenster löschte ich den Grid-Container und legte ein DockPanel. Ich kann jedoch auf die angefügten Eigenschaften eines Rasters über das DockPanel zugreifen. Wie ist das möglich?Grid's angefügte Eigenschaften immer verfügbar?

Danke!

<Window x:Class="testWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="testWindow" Height="300" Width="300"> 
    <DockPanel Grid.Column="2"> 

    </DockPanel> 
</Window> 

Antwort

1

Da die Eigenschaften sind nicht auf die Instanz, sondern gebunden sind - das heißt, sie statisch auf der Grid Klasse definiert sind, und dass die Werte in einer Eigenschaft Container außerhalb des normalen Eigenschaftensystem gespeichert sind.

Wenn Sie eine DockPanel innerhalb eines Grid haben, verwenden Sie Grid.Column festlegen, welche Spalte die DockPanel auf sein sollte. Daher können sie sehr nützlich sein. Angehängte Abhängigkeitseigenschaften können auch von der übergeordneten Struktur übernommen werden.

Weitere Informationen finden Sie unter diesem Link:

http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html

Wenn wir das Grid.Column Beispiel zu nehmen, die Einbauten sind, dass irgendwo in der Grid Klasse liegt eine Definition wie folgt:

public static readonly DependencyProperty ColumnProperty = 
    DependencyProperty.RegisterAttached(
     "Column", 
     typeof(int), 
     typeof(Grid), 
     new PropertyMetadata(0)); 

Der obige Code ist in der Tat alles, was benötigt wird, um eine angefügte Abhängigkeitseigenschaft zu deklarieren. Beachten Sie, dass hier kein Getter oder Setter vorhanden ist und dass die Eigenschaft statisch ist. Alles, was es ist, ist eine Verhaltenserklärung - es gibt keine Logik, sie zu speichern oder abzurufen.

Dies liegt daran, dass WPF einen eigenen internen Speicher für Dependency Properties (DPs) hat. Eine normale DP hat auch keine unterstützenden Felder in den Klassen. Mit anderen Worten, alle DPs werden intern von WPF gespeichert. WPF behält jedoch immer im Auge, welche Werte zu welchen Instanzen gehören. Daher ist es weiterhin möglich, einen Width = 20 für TextBox1 zu speichern. Es bedeutet auch, dass es möglich ist, Werte zu speichern, die für die Klassen selbst nicht definiert sind - wie es bei angehängten DPs der Fall ist.

Da es keine Regeln gibt, für die Steuerelemente Grid.Column aktiviert werden können, kann es auch auf Steuerelementen gespeichert werden, die keine untergeordneten Elemente eines Grid-Steuerelements sind.

+0

Danke für die Folge. Ich verstehe, dass die Kindersteuerelemente auf angehängte Eigenschaften ihrer Container zugreifen können. Beachten Sie in diesem Fall, dass sich das Dockpanel direkt auf dem Fenster und nicht auf einem Raster befindet. Trotzdem kann ich auf die Eigenschaft Grid.Column zugreifen. – soumyasg

+0

@soumyasg: Ich habe versucht, in meiner Antwort zu erarbeiten. Bitte lassen Sie mich wissen, wenn es nicht klar genug ist. –

+0

Vielen Dank für Ihre ausführliche Antwort. Ich werde die Abhängigkeiten/angehängten Eigenschaften erneut aufrufen müssen, um dies vollständig zu verstehen. Es erscheint mir immer noch ein wenig verschwommen. – soumyasg

Verwandte Themen