Я не думаю, что есть какой-либо поддерживаемый способ сделать это в самом xaml.В своем коде вы устанавливаете локальное значение для ContextValidationMessagesProperty .Установленные вами сеттеры стилей будут иметь более низкий приоритет свойства зависимостей , и даже если они будут оценены, они установят значение на основе указанного значения - не очистить его.Возможно, вместо того, чтобы устанавливать привязку в коде, вы можете использовать Setter в своем стиле по умолчанию для OmniBox, который устанавливает это свойство - например,
<Setter Property="ContextValidationMessages" Value="{Binding ValidationMessages}" />
Если вам нужно условно установить Binding, вы можете создать собственный IValueConverter, которыйпроверяет указанный тип (передается в качестве параметра).например,
public class IsAssignableFromConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Type typeParameter = parameter as Type;
if (typeParameter == null)
return DependencyProperty.UnsetValue;
return value != null && typeParameter.IsAssignableFrom(value.GetType());
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
Тогда вы можете использовать его следующим образом:
<local:IsAssignableFromConverter x:Key="isAssignableConverter" />
<Style TargetType="ui:OmniBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Converter={StaticResource isAssignableConverter}, ConverterParameter={x:Type ui:BindingObjectBaseExtended}}" Value="True">
<Setter Property="ContextValidationMessages" Value="{Binding ValidationMessages}" />
</DataTrigger>
</Style.Triggers>
</Style>
В случае, если вы не хотите применять это свойство, вы можете установить Стиль для этого экземпляраOmniBox в новом стиле и убедитесь, что установите для свойства OverridesDefaultStyle значение true .
Я предполагаю, что другой вариант заключается в создании другого свойства зависимости, которое будет вызывать ClearValue для свойства ContextValidationMessages, но это кажетсякак будто это может быть проблема с обслуживанием.