2015-08-10 5 views
14

Я разрабатываю универсальное приложение Windows для Windows 10, и одна из первых вещей, которые я обнаружил, заключается в том, что элемент триггера (XAML) не поддерживается при стилизации изображений. Вот код, который я пытаюсь выполнить:Элемент триггера (XAML) не поддерживается в проекте UWP

enter image description here

К сожалению, я должен был использовать изображение здесь, я получаю его от моего VM.

Как этот тип триггера реализован в универсальном приложении Windows?

ответ

17

Нет, у вас нет поддержки Trigger в UWP.

Обходной способ заключается в использовании DataTriggerBehavior с ChangePropertyAction для достижения того же самого.

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity" 
    xmlns:Core="using:Microsoft.Xaml.Interactions.Core" 

<Button x:Name="MyButton" Width="140" Height="80" IsEnabled="False"> 
    <Image x:Name="MyImage" Source="Assets/xxx.jpg"> 
     <Interactivity:Interaction.Behaviors> 
      <Core:DataTriggerBehavior Binding="{Binding IsEnabled, ElementName=MyButton}" Value="False"> 
       <Core:ChangePropertyAction TargetObject="{Binding ElementName=MyImage}" PropertyName="Opacity" Value="0.5" /> 
      </Core:DataTriggerBehavior> 
     </Interactivity:Interaction.Behaviors> 
    </Image> 
</Button> 

Обратите внимание, что вам нужно будет включить BehaviorsXamlSDKManaged от C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\BehaviorsXamlSDKManaged\12.0\. Когда вы добавите ссылку, вы получите предупреждение, но просто проигнорируете ее.

Update: Вы должны получить обновленный Behavior SDK из nuget Теперь.


Вариант 2

Вы всегда можете сделать то же самое в VisualStateManager. Открыть смесь и щелкните правой кнопкой мыши на вашем Button и выберите Edit Template, Редактировать Копию, а затем указать имя ресурса вы хотите и нажмите OK .

Тогда обратите внимание на инвалидовVisualState и заменить его

<VisualState x:Name="Disabled"> 
    <VisualState.Setters> 
     <Setter Target="RootGrid.(UIElement.Opacity)" Value="0.5" /> 
    </VisualState.Setters> 
</VisualState> 
+2

Вы правы по поводу отсутствия триггеров в UWP. Я больше привык к WPF и не понимаю, что они это сделали. Немного согласованности между платформами было бы хорошо! –

+0

@GlenThomas полностью согласен. Посмотрите на огромное количество кода выше по сравнению с WPF. :) –

+0

Я ожидаю, что они увидели VisualStateManager в качестве замены –

1

В качестве альтернативы вы можете использовать пространство имен

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity" 
xmlns:Core="using:Microsoft.Xaml.Interactions.Core" 

с

<ToggleButton Content="Execute" 
       IsChecked="{Binding ButtonIndicator}" 
       FontSize="8"> 
    <Interactivity:Interaction.Behaviors> 
     <Core:EventTriggerBehavior EventName="Checked"> 
      <Core:InvokeCommandAction Command="{Binding ExecuteCommand}" /> 
     </Core:EventTriggerBehavior> 
    </Interactivity:Interaction.Behaviors> 
</ToggleButton> 
Смежные вопросы