2015-08-10 21 views
14

Zajmuję się tworzeniem uniwersalnej aplikacji Windows dla systemu Windows 10 i jedną z pierwszych rzeczy, które znalazłem, jest to, że element Trigger (XAML) nie jest obsługiwany podczas stylizowania obrazów. Oto kod próbuję wdrożyć:Element wyzwalacza (XAML) nie jest obsługiwany w projekcie UWP

enter image description here

Niestety musiałem użyć obrazu tutaj, jestem coraz to z moim VM.

W jaki sposób zaimplementowano ten typ wyzwalacza teraz w uniwersalnej aplikacji Windows?

Odpowiedz

17

Nie, nie masz wsparcia Trigger w UWP.

Obejście polega na użyciu DataTriggerBehavior z ChangePropertyAction, aby osiągnąć dokładnie to samo.

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> 

Należy pamiętać, że trzeba będzie to BehaviorsXamlSDKManaged z C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\BehaviorsXamlSDKManaged\12.0\. Otrzymasz ostrzeżenie, gdy dodasz referencję, ale zignorujesz ją.

Aktualizacja: Powinieneś być coraz zaktualizowaną Behavior SDK z nuget teraz.


Opcja 2

Zawsze można zrobić to samo w VisualStateManager. Otwarte Mieszanka i kliknij prawym przyciskiem myszy na Button i wybierz Edycja szablonu, Edycja Kopiuj a następnie podać nazwę zasobu chcesz i uderzył OK.

Potem poszukaj NiepełnosprawnychVisualState i zastąpić go

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

Masz rację o braku wyzwalaczy w UWP. Jestem bardziej przyzwyczajony do WPF i nie zdawałem sobie sprawy, że to zrobili. Trochę spójności pomiędzy platformami byłoby miłe! –

+0

@GlenThomas całkowicie się zgadzam. Spójrz na ogromną ilość kodu powyżej w porównaniu do WPF. :) –

+0

Oczekuję, że zobaczą VisualStateManager jako zamiennik. –

1

Alternatywnie można użyć nazw

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

z

<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> 
Powiązane problemy