web-dev-qa-db-fra.com

L'élément déclencheur (XAML) n'est pas pris en charge dans un projet UWP

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:

 enter image description here

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?

16
Ray

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>
19
Justin XL

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>
1
dontbyteme