2013-02-21 1 views
0

Я пытаюсь установить маржу моего настраиваемого ComboBox, когда у него есть ошибка проверки. Вот код, который я пытаюсь использовать:WPF ControlTemplate, который я использую для Validation.ErrorTemplate, не может получить доступ к родительскому элементу управления

<ComboBox x:Class="Emsc.Prestige.Windows.AutoCompleteComboBox" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      x:Name="MyComboBox"> 

    <Validation.ErrorTemplate> 
     <ControlTemplate> 
      <Border x:Name="ErrorBorder" BorderThickness="2" CornerRadius="2"> 
       <AdornerElementPlaceholder x:Name="adorner"/> 
      </Border> 
     <ControlTemplate.Triggers> 
      <DataTrigger Binding="{Binding Path=AdornedElement.(Validation.Errors)[0].ErrorContent, ElementName=adorner, Converter={StaticResource ErrorContentToErrorTypeConverter}}" 
                 Value="Critical"> 
       <Setter TargetName="ErrorBorder" Property="BorderBrush" Value="Red" /> 
       <Setter TargetName="MyComboBox" Property="Margin" Value="0,0,10,0" /> 
      </DataTrigger> 
     </ControlTemplate> 
    </Validation.ErrorTemplate> 
</ComboBox> 

Так что, когда я установил BorderBrush для элемента ErrorBorder, он отлично работает. Но когда я пытаюсь получить доступ к свойству Margin (или какое-либо имущество) моего MyComboBox, я получаю следующее сообщение об ошибке:

The property 'TargetName' does not represent a valid target for the 'Setter' because an element named 'MyComboBox' was not found. Make sure that the target is declared before any Setters, Triggers or Conditions that use it.

Я хотел бы получить доступ к Маржа MyComboBox в XAML, а не в коде позади. Есть ли способ получить доступ к «TemplatedParent» через Setter в моем DataTrigger?

ответ

0

пытаются использовать стиль элемента, что-то вроде этого

<Style TargetType="ComboBox"> 
    <Style.Triggers> 
    <Trigger Property="Validation.HasError" Value="True"> 
     <Setter Property="Margin" Value="2" /> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

применить этот стиль к вашему комбобоксе