Wiedząc, czy właściwość DependencyProperty nie została ustawiona w XAML
Mam kontrolę, która ujawnia DP o nazwie PlacementTarget (jest powiązany z podrzędnym Popup FWIW).
To, co chcę zrobić, to jeśli PlacementTarget nie jest ustawiony w XAML, wtedy (kontrolka) ustawi go w oknie, w którym znajduje się formant. Kiedy mówię „nie ustawione”, nie mam na myśli po prostu „jest zerowe” (pozwala użytkownik dev, aby ustawić PlacementTarget na null, a formant nie ustawi go automatycznie w oknie).
Mam pole o nazwie placementTargetIsSet, które ustawiam na true w procedurze obsługi zmian Change
public readonly static DependencyProperty PlacementTargetProperty =
DependencyProperty.Register(
"PlacementTarget", typeof(UIElement), typeof(MyControl),
new PropertyMetadata(new PropertyChangedCallback(PlacementTargetChanged)));
static void PlacementTargetChanged(
DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
MyControl ctrl = (sender as MyControl);
ctrl.placementTargetIsSet = true;
}
public UIElement PlacementTarget
{
get { return (UIElement)GetValue(PlacementTargetProperty); }
set { SetValue(PlacementTargetProperty, value); }
}
Jednak odkrywam, że zmienione wydarzenie ma miejsce po PO OnApplyTemplate i zdarzeniu Loaded. tj. gdy zdarzają się OnApplyTemplate lub Loaded, placementTargetIsSet == false, niezależnie od tego, czy został ustawiony Cel umieszczenia, czy nie (w XAML).
Kiedy więc mogę bezpiecznie założyć, że cel umieszczenia nie został ustawiony?