Je développe une application Windows universelle pour Windows 10 et l'une des premières choses que j'ai constatées est que l'élément déclencheur (XAML) n'est pas pris en charge lors du style des images. Voici le code que j'essaye d'implémenter:
Désolé de devoir utiliser une image ici, je la récupère depuis ma VM.
Comment ce type de déclencheur est-il implémenté maintenant dans une application Windows universelle?
Non, vous n'avez pas le support Trigger
dans UWP.
Une solution de contournement consiste à utiliser DataTriggerBehavior
avec un ChangePropertyAction
pour accomplir exactement la même chose.
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>
Notez que vous devrez inclure BehaviorsXamlSDKManaged
à partir de C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\BehaviorsXamlSDKManaged\12.0\
. Vous recevrez un avertissement lorsque vous ajouterez la référence, mais l'ignorerez.
Mise à jour: Vous devriez recevoir une mise à jour Comportement SDK de nuget now.
Option 2
Vous pouvez toujours faire la même chose dans VisualStateManager
. Ouvrez Mélanger, cliquez avec le bouton droit de la souris sur Button
et sélectionnez Modifier le modèle, Modifier une copie, puis spécifiez le nom de la ressource souhaitée et cliquez sur OK.
Ensuite, recherchez DisabledVisualState
et remplacez-le par
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Target="RootGrid.(UIElement.Opacity)" Value="0.5" />
</VisualState.Setters>
</VisualState>
Sinon, vous pouvez utiliser les espaces de noms
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
avec
<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>