2010-08-20 36 views
18

Đây là kịch bản của tôi.Việc thay thế cho DataTrigger trong Silverlight

Tôi có 2 Thuộc tính. Loại và trạng thái.

Loại là Enum có 3 giá trị, ví dụ: bi, ô tô, mũi tên. Nhà nước là một int mà sẽ chấp nhận 3 giá trị nhà nước ví dụ, -1, 0, 1. Ngoài ra, tôi có 9 hình ảnh cho mỗi giá trị nhà nước.

Giống như, nếu tôi chọn loại làm bóng và giá trị là -1, tôi muốn hiển thị quả bóng màu đỏ. Nếu tôi chọn loại làm mũi tên và giá trị là 1, tôi muốn hiển thị mũi tên lên. v.v.

Tôi có thể thực hiện việc này trong WPF. Tôi đã tạo 3 DataTemplates với một Hình ảnh trống. Sau đó, tôi sử dụng DataTrigger để kiểm tra và cập nhật hình ảnh cụ thể cho StateValue đã chọn.

Nhưng, trong Silverlight làm cách nào tôi có thể thực hiện việc này. Tôi biết, tôi phải làm điều đó trong VSM. Nhưng, tôi muốn biết thêm một số chi tiết liên quan đến việc này (hoặc) bất kỳ lựa chọn thay thế nào có sẵn.

Trả lời

6

Tôi chỉ sử dụng trình chuyển đổi lấy đối tượng của bạn với 2 thuộc tính và trả về một hình ảnh. Mã như thế trong XAML thuần khiết là đau đớn và thực sự thuộc về C#.

+0

Thanks a lot. Cuối cùng, tôi kết thúc với bộ chuyển đổi một mình. –

17

Tôi muốn sử dụng các hành vi GoToState với DataTriggers trong Silverlight. Khá đơn giản trong Blend:

Đặt tất cả logic của bạn cho những gì đưa bạn đến trạng thái khác trong mô hình chế độ xem của bạn. Phơi bày trạng thái dưới dạng enum. Mở tab Hoa. Tạo một nhóm trạng thái mới (nếu bạn chưa có). Tạo trạng thái của bạn. Từ tab Nội dung, chọn Hành vi. Kéo hành vi GoToState từ tab Nội dung và thả nó vào phần tử trực quan gốc của bạn. Trong bảng Thuộc tính, nhấp vào nút "Mới" bên cạnh TriggerType và chọn DataTrigger. Hãy nhớ rằng enum trên mô hình xem của bạn? Đặt Trigger Binding thành enum trạng thái trên mô hình khung nhìn. Đặt giá trị kích hoạt thành giá trị của enum. Đặt StateName thành trạng thái đích.

Hỗn hợp bây giờ đã tạo tất cả XAML của VSM cho bạn. Một khi bạn nhận được hang của những điều bạn sẽ thấy như thế nào trong một số kịch bản bạn thậm chí không cần enum trên mô hình xem - bạn sẽ có thể lái xe hoàn toàn nhà nước ra khỏi xem.

13

Để mở rộng trên bài đăng của Mike Post, đây là XAML trong trường hợp bạn không có Blend.

Bạn cần thêm tham chiếu vào Microsoft.Expression.Interactions và System.Windows.Interactivity.

xmlns:ia="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
xmlns:iv="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 

Sau đó, trong kiểm soát của bạn, ở mức độ tương tự như VisualStateManager đặt này:

<iv:Interaction.Triggers> 
    <ia:DataTrigger Binding="{Binding PropertyName}" Value="PropertyValue" > 
     <ia:GoToStateAction StateName="StateName" /> 
    </ia:DataTrigger> 
</iv:Interaction.Triggers> 
+1

Bất kỳ cơ hội nào bạn có thể xây dựng ví dụ này? Tôi đang gặp khó khăn trong việc tìm kiếm một ví dụ, hoàn chỉnh, tốt đẹp trong XAML trực tuyến ở bất cứ đâu. –

5

Các bài viết trên blog "Expression SDK in Silverlight–DataTrigger Example" bao gồm nó khá tốt.Dưới đây là một ví dụ về những gì anh ấy làm:

<i:Interaction.Triggers> 
    <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="false"> 
     <ia:ControlStoryboardAction Storyboard="{StaticResource DisableStoryboard}"></ia:ControlStoryboardAction> 
    </ia:DataTrigger> 

    <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="true"> 
     <ia:ControlStoryboardAction Storyboard="{StaticResource EnableStoryboard}"></ia:ControlStoryboardAction> 
    </ia:DataTrigger> 
</i:Interaction.Triggers> 

(Với hai tiền tố namespace XML iia được quy định như sau :)

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ia="http://schemas.microsoft.com/expression/2010/interactions" 
Các vấn đề liên quan