2009-04-19 4 views

Répondre

1

Cela prouve (ou peut prouver) qu'il n'a pas:

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

je pense qu'il est utile de mentionner, la Adorner hérite de la DataContext du AdornerDecorator utilisé. Ainsi, si vous définissez un AdornerDecorator à l'intérieur d'un autre FrameworkElement, tous les ornements que vous affichez auront le même DataContext de FrameworkElement. – Lukazoid

Questions connexes