2012-03-01 7 views
1

Я создал стиль Button как DataTemplate в ResourceDictionary. Здесь небольшая часть:DataTemplate проверить, существует ли привязка

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Focusable" Value="False"></Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="border"> 
        ... 
       </Border> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
         <Setter Property="Background" TargetName="border" Value="Red" /> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

В этом Шаблоне есть привязка к Исправленному Исключению. Это Propertie находится в одной ситуации, а в другом нет.

Можно ли проверить Xaml, если существует связующий путь, а затем использовать его в другом случае забудьте об этом? Теперь у меня было BindingExpression на выходе Debug, и я хочу устранить это.

ответ

1

Более уместный вопрос: почему у вас есть DataTrigger в вашем ControlTemplate? Это создает зависимость между контентом управления и его данными, поэтому вы столкнулись с этой проблемой, когда ваш контекст данных не соответствует ожиданиям шаблона управления.

Вы уверены, что не можете использовать более подходящий механизм? Например, вы могли бы использовать стиль для тех кнопок, где IsSelected должен влиять на Background?

<Style x:Key="SpecialButtonStyle" TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
      <Setter Property="Background" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

... 

<Button DataContext="relevant data context" Style="{StaticResource SpecialButtonStyle}"/> 

Или, еще лучше, вы могли бы определить шаблон данных для конкретного класса данных, у вас есть, что имеет IsSelected свойство? Этот шаблон данных может автоматически использовать правильный стиль Button.

+0

И как я могу получить доступ к границе TargetName? Что в другом стиле? Это возможно? – San

+1

У вас нет. Вместо этого вы обновляете свойство элемента управления, к которому привязывается ваш шаблон управления. Это обеспечивает четкое разделение данных и визуализацию этих данных. В этом случае у вас может быть триггер стиля, который задает свойство «Background» кнопки «Button». Элемент 'border' в шаблоне управления кнопки затем будет использовать' TemplateBinding' для свойства 'Background' кнопки. –

Смежные вопросы