2
Question d'origine: Est-ce qu'un Adorner
hérite automagiquement du "DataContext" de son "AdornedElement" dans WPF?Non, un Adorner NE prend PAS automatiquement le DataContext de son AdornedElement dans WPF
Question d'origine: Est-ce qu'un Adorner
hérite automagiquement du "DataContext" de son "AdornedElement" dans WPF?Non, un Adorner NE prend PAS automatiquement le DataContext de son AdornedElement dans WPF
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();
}
}
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