2014-10-30 4 views
2

У меня простой пример и привязка данных с использованием TemplatedParent не работает. Кто-нибудь знает, что не так?DataTrigger от взаимодействия не работает Windows Phone

<Button Background="Red" Content="xD"> 
     <Button.Template> 
      <ControlTemplate TargetType="Button"> 
       <Border> 
        <i:Interaction.Triggers> 
         <ec:DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Background}" Value="Red"> 
          <ec:ChangePropertyAction PropertyName="Background" Value="CadetBlue"/> 
         </ec:DataTrigger> 
        </i:Interaction.Triggers> 
       </Border> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 

Ошибка в выходе. Предполагается, что фон должен быть установлен в CadetBlue, но эффект не применяется.

+0

Вы могли бы быть более подробно о том, как он не работает? любые исключения или уведомления об ошибках в окне *** Output ***? –

+0

Я думаю, что режим TemplatedParent может использоваться только для 'ControlTemplate', в этом случае он используется для' Border'. –

+0

Не работает. – Maximus

ответ

1

Похоже, что RelativeSource.TemplatedParent работает нормально внутри шаблона, но триггеры работают не так, как ожидалось: если условие триггера совпадает с начальным, триггер/действие не срабатывает. Если вы измените связанное свойство программно, триггер будет пожара. Вот почему он работает с IsPressed: кнопка не запускалась; он был нажат после того, как он был загружен.

При перемещении спусковых из шаблона и присоединить их непосредственно к кнопке и отрегулируйте привязки соответственно, все должно работать:

<Button x:Name="_button" 
     Background="Red" 
     Content="xD"> 
    <i:Interaction.Triggers> 
    <ei:DataTrigger Binding="{Binding ElementName=_button, Path=Background.Color}" 
        Value="Red"> 
     <ei:ChangePropertyAction PropertyName="Background" 
           Value="CadetBlue" /> 
    </ei:DataTrigger> 
    </i:Interaction.Triggers> 
    <Button.Template> 
    <ControlTemplate TargetType="Button"> 
     <Border Background="{TemplateBinding Background}"> 
     <ContentPresenter /> 
     </Border> 
    </ControlTemplate> 
    </Button.Template> 
</Button> 

Обратите внимание на фоне триггер должен связываться с Background.Color; он не работает, если вы привязываетесь к самой кисти, возможно потому, что SolidColorBrush не переопределяет Equals.

+0

Как это должно мне помочь? Это не приносит никакого эффекта. Кажется, что DataTrigger не может получить доступ к TemplatedParent, или если он не может изменить элемент, в этом случае граница. – Maximus

+0

Вы не увидите фон вообще, если вы не ссылаетесь на него в своем шаблоне. Если вы не можете разрешить 'TemplatedParent', переместите' i: Interaction.Triggers' непосредственно под 'Button', а не в шаблон. –

+0

Я не хочу его видеть, но читать его и основываться на его ценности делать некоторые действия. Я вставил простой пример, но обычно я хочу прочитать, например, свойство IsEnabled и выполнить некоторые действия внутри шаблона. Главная проблема заключается в том, что я не могу связаться с родительским шаблоном, используя взаимодействия. – Maximus

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