2015-08-10 16 views
14

Tôi đang phát triển ứng dụng Windows Universal cho Windows 10 và một trong những điều đầu tiên tôi thấy là yếu tố Kích hoạt (XAML) không được hỗ trợ khi tạo hình ảnh. Đây là mã tôi đang cố gắng để thực hiện:Phần tử kích hoạt (XAML) không được hỗ trợ trong dự án UWP

enter image description here

Xin lỗi tôi đã phải sử dụng hình ảnh vào đây, tôi nhận được nó từ VM của tôi.

Loại trình kích hoạt này được triển khai như thế nào trong Ứng dụng Windows phổ biến?

Trả lời

17

Không, bạn không có hỗ trợ Trigger trong UWP.

Giải pháp thay thế là sử dụng DataTriggerBehavior với ChangePropertyAction để thực hiện chính xác điều tương tự.

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> 

Lưu ý rằng bạn sẽ cần phải bao gồm BehaviorsXamlSDKManaged từ C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\BehaviorsXamlSDKManaged\12.0\. Bạn sẽ nhận được cảnh báo khi bạn thêm tham chiếu nhưng chỉ bỏ qua nó.

Cập nhật: Bạn nên nhận được một cập nhật Behavior SDK từ nuget bây giờ.


Lựa chọn 2

Bạn luôn có thể làm điều tương tự trong VisualStateManager. Mở Blend và nhấp chuột phải vào Button của bạn và chọn Sửa Template, Sửa Sao chép và sau đó ghi rõ tên tài nguyên mà bạn muốn và nhấn OK .

Sau đó tìm kiếm các DisabledVisualState và thay thế bằng

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

Bạn nói đúng về việc thiếu của Trình kích hoạt trong UWP. Tôi quen với WPF hơn và không nhận ra họ đã làm điều đó. Một chút nhất quán giữa các nền tảng sẽ tốt đẹp! –

+0

@GlenThomas hoàn toàn đồng ý. Nhìn vào số lượng lớn mã trên so với WPF. :) –

+0

Tôi hy vọng họ nhìn thấy VisualStateManager như là một thay thế –

1

Hoặc bạn có thể sử dụng không gian tên

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

với

<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> 
Các vấn đề liên quan