2012-06-14 21 views
5

Tôi đã tìm kiếm tất cả và dường như không thể tìm thấy câu trả lời cho câu hỏi này. Ứng dụng của tôi sống trong thế giới XAML lỏng lẻo nên phải dựa vào XamlReaders và đi bộ trên cây để tìm các yếu tố. Tôi có một thành phần xử lý việc hiển thị các trang XAML này. Trình kết xuất đó cần phải biết trạng thái của bảng phân cảnh có thể chạy trên XAML đã tải. Vì vậy, những gì tôi muốn làm trong trình kết xuất đồ họa của tôi là như sau: -GetCurrentState trên Bảng phân cảnh được xác định và bắt đầu bằng XAML

var resources = _currentScreenFrameworkElement.Resources; 
foreach (var item in resources.Values) 
{ 
    if (item is Storyboard) 
    { 
     try 
     { 
      var storyboard = item as Storyboard; 
      **if (storyboard.GetCurrentState() == ClockState.Active)** 

Tất cả tốt và tốt. Tuy nhiên vấn đề là khi tôi thử đánh dấu CurrentState nó ném một ngoại lệ: -

"Cannot perform action because the specified Storyboard was not applied to this object for interactive control." 

Nhìn xung quanh tôi thấy đó là vì tôi cần làm cho bảng phân cảnh có thể điều khiển được. Vì vậy, câu hỏi của tôi là làm thế nào để tôi làm điều này trong XAML? Tôi không bắt đầu bảng phân cảnh trong mã vì vậy không thể chuyển đúng vào bảng BeginStory được nạp quá tải.

Trả lời

5

Tôi chỉ gặp phải vấn đề tương tự này vì vậy tôi đã tìm ra chia sẻ những phát hiện của mình.

Bạn gặp lỗi đó khi bảng phân cảnh của bạn không được đánh dấu là Controllable. Các bảng phân cảnh được đánh dấu là Có thể điều khiển khi phương thức Begin được gọi.

Nếu bạn đang thực hiện nó từ mã sau đó bạn chỉ cần sử dụng quá tải có đối số boolean IsControllable boolean này (list of Begin overloads).

Nếu bạn đã sử dụng phần tử BeginAnimation trong Xaml thì bạn sẽ cần phải làm 2 việc.

  1. gán Name cho phần tử BeginAnimation. documentation cho thuộc tính này nêu rõ: "Nếu Tên của Bảng giới thiệu không được chỉ định, Bảng phân cảnh không thể bị ảnh hưởng tương tác sau khi bắt đầu"
  2. Khi bạn đang cố gắng tương tác với bảng phân cảnh của mình trong codebehind, bạn phải vượt qua tham chiếu đến đối tượng mà BeginStoryboard của bạn đã khai báo trong.

Dưới đây là một ví dụ cho thấy bạn bước 1 (tên beginstoryboard)

<Button Name="btn1" Content="bla"> 
    <Button.Triggers> 
    <EventTrigger RoutedEvent="Button.Click"> 
     <BeginStoryboard 
      Name="bnt1_beginStoryboard" 
      Storyboard={StaticResource someSharedStoryboard}"/> 
    </EventTrigger> 
    </Button.Triggers> 
</Button> 

và đây là một ví dụ cho bước 2. vì bạn đã đặt tên của bạn beginStoryboard bạn có thể sử dụng nó như một biến cục bộ trong lớp của bạn .. hoặc bạn có thể tham khảo bảng phân cảnh thực tế trực tiếp. Vấn đề chính là bạn phải vượt qua trong các chủ sở hữu của beginStoryboard (đó là nút trong trường hợp này)

//The main point here is that we're passing in btn1 
bnt1_beginStoryboard.Storyboard.Stop(btn1); 
bnt1_beginStoryboard.Storyboard.SkipToFill(btn1); 
bnt1_beginStoryboard.Storyboard.Resume(btn1); 

Dưới đây là một danh sách của tất cả các "hành động" phương pháp trên một kịch bản mà yêu cầu bạn phải vượt qua trong các sở hữu phần tử khung: Control a Storyboard After It Starts

Các vấn đề liên quan