2015-08-10 20 views
14

Sto sviluppando un'applicazione Windows universale per Windows 10 e una delle prime cose che ho trovato è che l'elemento Trigger (XAML) non è supportato quando si disegnano le immagini. Ecco il codice che sto cercando di implementare:Elemento trigger (XAML) non supportato in un progetto UWP

enter image description here

dispiace ho dovuto usare un'immagine qui, sto ottenendo dal mio VM.

In che modo questo tipo di trigger è ora implementato in un'app per Windows universale?

risposta

17

No, non si dispone del supporto Trigger in UWP.

Una soluzione alternativa consiste nell'utilizzare DataTriggerBehavior con un ChangePropertyAction per ottenere la stessa identica cosa.

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> 

Nota che sarà necessario includere BehaviorsXamlSDKManaged da C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\BehaviorsXamlSDKManaged\12.0\. Riceverai un avviso quando aggiungi il riferimento ma lo ignori.

Aggiornamento: Si dovrebbe essere sempre una versione aggiornata Comportamento SDK da nuget ora.


Opzione 2

Si può sempre fare la stessa cosa in VisualStateManager. Aprire Miscela e fare clic destro sul vostro Button e selezionare Modifica modello , Modifica copia e quindi specificare il nome della risorsa che si desidera e ha colpito OK.

quindi cercare il disabiliVisualState e sostituirlo con

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

Hai ragione circa la mancanza di trigger in UWP. Sono più abituato a WPF e non mi ero reso conto di averlo fatto. Un po 'di coerenza tra le piattaforme sarebbe stato bello! –

+0

@GlenThomas totalmente d'accordo. Guarda l'enorme quantità di codice sopra rispetto a WPF. :) –

+0

Mi aspetto che vedano VisualStateManager come una sostituzione –

1

In alternativa è possibile utilizzare gli spazi dei nomi

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

con

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