我需要控制從類型網格的祖先繼承UIElement.IsEnabledProperty(可選窗口或任何其他元素i可以包裝我的網格)依賴項屬性繼承
CS:下面我重寫UIElement的元數據.IsEnabledProperty並使用Change和Coerce代表進行設置。
static PipeControl()
{
PipeControl.IsEnabledProperty.OverrideMetadata(typeof(PipeControl), new FrameworkPropertyMetadata(false, OnIsEnabledPropertyChanged, OnIsEnabledPropertyCoerce));
}
private static void OnIsEnabledPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var isEnabled = (bool)e.NewValue;
}
private static object OnIsEnabledPropertyCoerce(DependencyObject d, object baseValue)
{
var valueSource = DependencyPropertyHelper.GetValueSource(d, PipeControl.IsEnabledProperty);
var pipeContorl = d as PipeControl;
if (pipeContorl == null) return baseValue;
return (bool)baseValue && pipeContorl.IsMyPipe;
}
XAML:
<Grid IsEnabled="{Binding IsMyCondition , Mode=OneWay}">
<game:PipeControl Grid.Row="2" />
<game:PipeControl Grid.Row="2" Grid.Column="1" />
</Grid>
每個IsMyCondition改變OnIsEnabledPropertyCoerce被稱爲在每個PipeContorl時間, OnIsEnabledPropertyChanged不會被調用, 的ValueSource在OnIsEnabledProerty迫使是 「默認」(顯示強迫總是得到默認的假值)。
我必須在其中我需要使用繼承, 我預計值來源是「繼承」的方式錯過了一些 和OnIsEnabledPropertyChanged被調用。
我會稍後再檢查一下,10x – 2013-04-10 15:38:08
這很棒,但還有一件事,我仍然希望在PipeControl的IsEnabledProperty更改時得到通知,並從那裏強制值。 我可以做到這一點與出一個不同的通知,如IsMyPipe的回調通知 – 2013-04-10 18:05:04