2
元の質問:Adorner
はWPFの "AdornedElement"の "DataContext"を自動的に継承しますか?いいえ、Adornerは自動的にWPFのAdornedElementのDataContextを取得しません
元の質問:Adorner
はWPFの "AdornedElement"の "DataContext"を自動的に継承しますか?いいえ、Adornerは自動的にWPFのAdornedElementのDataContextを取得しません
これは、そうでないことを証明している(または証明することができます):
public class SomeObject
{ }
public class SomeAdorner : Adorner
{
public SomeAdorner(UIElement adornedElement) : base(adornedElement)
{
// comment out the following statement to see that, by default, an adorner does not
// take on the data context of its adorned ui element
SetBinding(
DataContextProperty,
new Binding(DataContextProperty.Name)
{
Mode = BindingMode.OneWay,
Source = adornedElement
}
);
}
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if ((e.Property.Name.Equals(DataContextProperty.Name)) && (e.NewValue is SomeObject))
{ MessageBox.Show("DataContext changed!"); }
}
}
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Loaded += new RoutedEventHandler(Window1_Loaded);
}
void Window1_Loaded(object sender, RoutedEventArgs e)
{
AdornerLayer.GetAdornerLayer(WindowContentWithElementName)
.Add(new SomeAdorner(WindowContentWithElementName));
WindowContentWithElementName.DataContext = new SomeObject();
}
}
私はそれは言及する価値だと思う、Adornerは、使用されているAdornerDecoratorのDataContextのを継承します。したがって、別のFrameworkElementの内部にAdornerDecoratorを定義すると、表示するすべての装飾者はFrameworkElementの同じDataContextを持ちます。 – Lukazoid