diese Quelle Gegeben: external code baseRolle diskreter wpf Abhängigkeitseigenschaft erhalten und setzen extentions
und diese statische Klasse speziell:
public static class TreeViewItemBehavior
{
public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem)
{
return (bool)treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
}
public static void SetIsBroughtIntoViewWhenSelected(
TreeViewItem treeViewItem, bool value)
{
treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
}
public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
DependencyProperty.RegisterAttached(
"IsBroughtIntoViewWhenSelected",
typeof(bool),
typeof(TreeViewItemBehavior),
new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
static void OnIsBroughtIntoViewWhenSelectedChanged(
DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
TreeViewItem item = depObj as TreeViewItem;
if (item == null)
return;
if (e.NewValue is bool == false)
return;
if ((bool)e.NewValue)
item.Selected += OnTreeViewItemSelected;
else
item.Selected -= OnTreeViewItemSelected;
}
static void OnTreeViewItemSelected(object sender, RoutedEventArgs e)
{
// Only react to the Selected event raised by the TreeViewItem
// whose IsSelected property was modified. Ignore all ancestors
// who are merely reporting that a descendant's Selected fired.
if (!Object.ReferenceEquals(sender, e.OriginalSource))
return;
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item != null)
item.BringIntoView();
}
#endregion // IsBroughtIntoViewWhenSelected
}
Was die Rolle der "Get" und "Set" vorfixierte Methoden? Das Hinzufügen dieser Klasse und das Festlegen einer TreeView.ItemControlsStyle-Setter-Eigenschaft in XAML auf die statische Abhängigkeitseigenschaft und ihr Wert auf "True" funktionieren wie erwartet. Wenn ich sowohl die get und Satz vorangestellt Methoden kommentieren und neu kompilieren, klagt Intellisense, dass das Eigentum des Stils nicht null sein kann, noch Kompilation ist nach wie vor erfolgreich, und die Funktionalität von
static void OnIsBroughtIntoViewWhenSelectedChanged(
DependencyObject depObj, DependencyPropertyChangedEventArgs e)
wird gehalten.
Die Beschwerde bleibt, wenn beide Methodennamen in irgendeiner Weise geändert werden, die Beschwerde fehlt, wenn nur eine Methode auskommentiert/modifiziert wird.
Ist dies ein alternatives Mittel zum Implementieren von Eigenschaft get und set? Sucht das Steuerelement automatisch eine "Get/Set + PropertyName" -Erweiterungsmethode in XAML? Wie/Warum kann das funktionieren, wenn die Erweiterungen "get" und "set" deaktiviert/auskommentiert sind? Die Klasse und der XAML-Ref können unter dem angegebenen Link gefunden werden. Ich habe die angegebene XAML-Eigenschaft ref geändert, indem ich sie als x: Static deklariert habe, und das ist die einzige Änderung. Vielen Dank für jede Einsicht ...