2010-01-05 32 views
8

Tôi có một UserControl với một bảng câu chuyện và tôi muốn dừng hoạt ảnh khi khả năng hiển thị của kiểm soát thay đổi.Bảng phân cảnh dừng WPF về khả năng hiển thị đã thay đổi

Tôi đã tạo Trình kích hoạt để tạm dừng hoạt ảnh và khởi động nó tùy thuộc vào trạng thái, nhưng tôi tiếp tục nhận được một ArgumentException.

Đây là XAML:

<UserControl.Triggers> 
    <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
     <BeginStoryboard x:Name="ProgressAnimation_BeginStoryboard" Storyboard="{StaticResource ProgressAnimation}"/> 
    </EventTrigger> 
    <Trigger Property="Control.Visibility" Value="Collapsed"> 
     <PauseStoryboard BeginStoryboardName="ProgressAnimation_BeginStoryboard" /> 
    </Trigger> 
    <Trigger Property="Control.Visibility" Value="Visible"> 
     <ResumeStoryboard BeginStoryboardName="ProgressAnimation_BeginStoryboard" /> 
    </Trigger> 
</UserControl.Triggers> 

và đây là ngoại lệ:

Giá trị "System.Windows.Media.Animation.PauseStoryboard" không phải là loại "System.Windows. SetterBase "và không thể được sử dụng trong bộ sưu tập chung này. Tên thông số: giá trị

Làm cách nào để thực hiện điều này trong XAML?

Cảm ơn, Raul

Trả lời

0

Hãy xem sample from MSDN này:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<StackPanel> 
    <Rectangle Name="TargetRect" Width="200" Height="200" Fill="Blue"/> 
    <Button Name="Begin">BeginStoryboard</Button> 
    <Button Name="Pause">PauseStoryboard</Button> 
    <Button Name="Resume">ResumeStoryboard</Button> 
    <StackPanel.Triggers> 
    <EventTrigger SourceName="Begin" RoutedEvent="Button.Click"> 
    <BeginStoryboard Name="ColorStoryboard"> 
    <Storyboard TargetName="TargetRect"> 
     <ColorAnimation Storyboard.TargetProperty="Fill.Color" To="Red" Duration="0:0:3" RepeatBehavior="Forever" AutoReverse="True"/> 
    </Storyboard> 
    </BeginStoryboard> 
    </EventTrigger> 
    <EventTrigger SourceName="Pause" RoutedEvent="Button.Click"> 
    <PauseStoryboard BeginStoryboardName="ColorStoryboard"/> 
    </EventTrigger> 
    <EventTrigger SourceName="Resume" RoutedEvent="Button.Click"> 
    <ResumeStoryboard BeginStoryboardName="ColorStoryboard"/> 
    </EventTrigger> 
    </StackPanel.Triggers> 
</StackPanel> 
</Page> 

Sự khác biệt duy nhất tôi có thể thấy là họ đang sử dụng EventTrigger đây, nhưng nó phải cư xử giống nhau, ít nhất là trong kinh nghiệm của tôi.

+0

Điều đó sẽ không làm việc vì một usercontrol chỉ có thể chứa EventTriggers trong khi tôi cần một . – HaxElit

14

Bạn có thể làm điều đó bằng cách sử dụng mẫu kiểm soát:

<ControlTemplate> 
    ... Control stuff here 

    <ControlTemplate.Triggers> 
     <Trigger Property="Visibility" Value="Visible"> 
      <Trigger.EnterActions> 
       <BeginStoryboard Storyboard="{StaticResource AnimationStoryboard}" x:Name="AnimationBeginStoryboard"/> 
      </Trigger.EnterActions> 
      <Trigger.ExitActions> 
       <RemoveStoryboard BeginStoryboardName="AnimationBeginStoryboard"/> 
      </Trigger.ExitActions> 
     </Trigger> 
    </ControlTemplate.Triggers> 

</ControlTemplate> 
Các vấn đề liên quan