я нужен мой контроль, чтобы наследовать UIElement.IsEnabledProperty от Предок типа сетки (Факультативно окно или любого другого элемента я мог обернуть мою сетку с)Dependency Property Наследованию
CS: ниже я переопределить мета-данные UIElement .IsEnabledProperty и установите его с делегатами Change and 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 –
, это замечательно, но есть еще одна вещь, мне все равно хотелось бы получить уведомление о том, что IsEnabledProperty от PipeControl изменится, и отмените значение оттуда. Могу ли я сделать это с помощью другого уведомления, такого как уведомление обратного вызова для IsMyPipe –