2013-04-04 20 views
6

Tôi có một nhãn mà tôi chỉ hiển thị dựa trên một trong các Thuộc tính ViewModel của mình. Đây là XAML:Tạo Flash nhãn WPF (hoặc phần tử khác) bằng hoạt ảnh

<Label HorizontalAlignment="Center" VerticalAlignment="Center" 
     HorizontalContentAlignment="Center" 
     VerticalContentAlignment="Center" 
     FontSize="24" Width="200" Height="200" > 
    <Label.Content > 
     Option in the money! 
    </Label.Content> 
    <Label.Style> 
     <Style TargetType="{x:Type Label}"> 
      <Setter Property="Visibility" Value="Hidden" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding OptionInMoney}" Value="True"> 
        <Setter Property="Visibility" 
       Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Label.Style> 

</Label> 

Tôi không chắc đây là cách tốt nhất, nhưng trong mọi trường hợp, tôi cũng muốn có nhãn nhấp nháy. Rõ ràng, tôi chỉ muốn nó nhấp nháy khi nó được nhìn thấy. Ai đó có thể chỉ cho tôi một số mã ví dụ, hoặc viết một ví dụ nhanh để làm điều này? Tôi cho rằng tôi cần một loại kích hoạt, và một hình ảnh động. Có lẽ tôi cũng cần kích hoạt khi nhãn không còn nhìn thấy được nữa để tôi ngừng hoạt ảnh?

Xin cảm ơn, Dave P.S. Có một cuốn sách hoặc trang web tốt cho tất cả các thủ thuật WPF? Một cái gì đó giống như "MFC Trả lời Sách" cho những người nhớ rằng cuốn sách.

+0

Hệ thống giao dịch tùy chọn Hah? :) Bạn có quen thuộc với hoạt ảnh trên bảng phân cảnh không? Bạn có thể nhận được hành vi bạn đang theo sau bằng cách làm động tác động thuộc tính Opacity trên phần tử - nếu tôi có cơ hội tôi sẽ đưa ra một ví dụ. – JerKimball

Trả lời

22

Bạn có thể thêm hoạt ảnh Storyboard vào Style.Resources và khởi động nó trong phần EnterActions của DataTrigger.

Một đơn giản DoubleAnimation trên Opacity nên hoạt động tốt

Something như thế này:

<Label.Style> 
    <Style TargetType="{x:Type Label}"> 
     <Style.Resources> 
      <Storyboard x:Key="flashAnimation" > 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" AutoReverse="True" Duration="0:0:0.5" RepeatBehavior="Forever" /> 
      </Storyboard> 
     </Style.Resources> 

     <Setter Property="Visibility" Value="Hidden" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding OptionInMoney}" Value="True"> 
       <Setter Property="Visibility" Value="Visible" /> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Name="flash" Storyboard="{StaticResource flashAnimation}" /> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="flash"/> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 

     </Style.Triggers> 
    </Style> 
</Label.Style> 
+0

Tuyệt vời! Tôi có cần phải sắp xếp để dừng hoạt ảnh khi thuộc tính (OptionInMoney) quay trở lại false, hoặc điều đó sẽ xảy ra tự động. I E. Tôi có cần một DataTrigger.ExitActions và nếu có, làm cách nào để thiết lập điều đó? Tôi đề cập đến nó, bởi vì tôi đã thấy một số cuộc thảo luận trong các bài viết khác của hoạt hình tiếp tục mãi mãi mặc dù nó không hiển thị. Cảm ơn một lần nữa. – Dave

+0

vâng, có thể là một ý tưởng tốt để dừng hoạt ảnh trong 'ExitActions', tôi đã cập nhật câu trả lời với' StopStoryboard' –

+0

Hoàn hảo. Cảm ơn một lần nữa. – Dave

0

Hãy thử this post. Nó được gọi là 'Nhấp nháy TextBlock' nhưng bạn có thể dễ dàng hoán đổi một TextBox cho Nhãn '.

+0

Tránh các câu trả lời chỉ liên kết. Chúng dễ bị liên kết thối. – ANeves

2

Storyboard chắc chắn là cách WPF, nhưng nó có thể được thực hiện bằng một mã đơn giản cũng có. Ở đây nó đi, để thực hiện một chớp nền label:

lblTimer là một Lebel vào mẫu của bạn với một số văn bản, nói rằng, "TÔI nhấp nháy"

Điều này có thể được áp dụng cho bất kỳ tài sản, như tầm nhìn.

// Create a timer. 
private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    DispatcherTimer timer = new DispatcherTimer(); 
    timer.Tick += timer_Tick; 
    timer.Interval = new TimeSpan(0, 0, 0, 0, 500); 
    timer.Start(); 
} 

// The timer's Tick event. 
private bool BlinkOn = false; 
private void timer_Tick(object sender, EventArgs e) 
{ 
    if (BlinkOn) 
    { 
     lblTimer.Foreground = Brushes.Black; 
     lblTimer.Background = Brushes.White; 
    } 
    else 
    { 
     lblTimer.Foreground = Brushes.White; 
     lblTimer.Background = Brushes.Black; 
    } 
    BlinkOn = !BlinkOn; 
} 
+0

Làm việc tốt, tôi sử dụng độ mờ để nhấp nháy với Chế độ hiển thị. Đã thu gọn khi sử dụng opts để loại bỏ (các) thành phần nhấp nháy +1 – BENN1TH

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