2009-04-19 1 views

答えて

1

これは、そうでないことを証明している(または証明することができます):

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(); 
    } 
} 
+2

私はそれは言及する価値だと思う、Adornerは、使用されているAdornerDecoratorのDataContextのを継承します。したがって、別のFrameworkElementの内部にAdornerDecoratorを定義すると、表示するすべての装飾者はFrameworkElementの同じDataContextを持ちます。 – Lukazoid

関連する問題