2010-06-02 11 views
5

Ich frage mich, wenn jemand irgendwelche gut (kostenlos) Verhalten für Cuvee/Silverlight 4Behaviors für Blend (Silverlight 4)

Insbesondere weiß ich suche ein Verhalten, das ich auf einem Textblock fallen kann zu machen Es scrollt horizontal oder ein Verhalten, das Text in einem TextBlock "blinkt" (blinkender Text). Aber ich würde gerne von irgendwelchen Verhaltensweisen hören, die du benutzt oder über die du Bescheid weißt.

Als Beispiel habe ich einen sehr einfachen „text blinkendes“ Verhalten mit

public class FlashTextBehavior : Behavior<TextBlock> 
{ 
    Timer flashTimer; 

    public FlashTextBehavior() 
    { 

    } 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     flashTimer = new Timer(new TimerCallback((o) => 
     { 
      Dispatcher.BeginInvoke(() => 
      { 
       if (AssociatedObject.Visibility == Visibility.Visible) 
        AssociatedObject.Visibility = Visibility.Collapsed; 
       else 
        AssociatedObject.Visibility = Visibility.Visible; 
      });    
     }), null, 0, 750); 
    } 

    protected override void OnDetaching() 
    { 
     if (flashTimer != null) 
      flashTimer.Dispose(); 

     base.OnDetaching(); 
    } 
} 

Natürlich kann es verbessert werden, aber ich bin wirklich daran interessiert, was andere Leute gekommen sind aufgestanden .

+0

Mit "horizontal scrollen", meinst du automatisch wie ein Laufband oder etwas anderes? –

+0

Ich meine, dass der Text innerhalb der TextBox wie ein Lauftext rollt – TimothyP

Antwort

1

Für den Textblock Scrollen ich folgendes empfehlen, weil Translatetransform und Clipping nicht so glatt ist, lassen Sie uns in XAML hinzu:

<ScrollViewer Margin="40" Width="100" VerticalAlignment="Top" HorizontalAlignment="Left" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" HorizontalScrollMode="Enabled"> 
     <i:Interaction.Behaviors> 
      <behaviors:ScrollHorizontalBehavior/> 
     </i:Interaction.Behaviors> 
     <TextBlock Foreground="White" Text="asdfasdfasdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf HALF asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf LAST" > 
     </TextBlock> 
    </ScrollViewer> 

Und jetzt der Konverter:

public class ScrollHorizontalBehavior : DependencyObject, IBehavior 
{ 
    public DependencyObject AssociatedObject { get; private set; } 

    public void Attach(DependencyObject associatedObject) 
    { 
     AssociatedObject = associatedObject; 
     InitializeTranslation(); 
    } 

    private DispatcherTimer UITimer { get; set; } 
    private void InitializeTranslation() 
    { 
     var element = AssociatedObject as ScrollViewer; 
     UITimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(30) }; 
     UITimer.Tick += (s, e) => 
     { 
      var newvalue = element.HorizontalOffset + 20; 
      if (newvalue > element.ScrollableWidth) 
       newvalue = 0; 
      element.ChangeView(newvalue, null, null); 
     }; 
     UITimer.Start(); 
    } 

    public void Detach() 
    { 
     if (UITimer != null) UITimer.Stop(); 
    } 
} 

Und das Beste Auf diese Weise können Sie, wie Sie sehen, am Ende des Scrollens verwalten, was zu tun ist.

Und jetzt Hinzufügen des Blinkverhalten

<TextBlock Foreground="White" Text="asdfasdfasdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf HALF asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf LAST" > 
      <i:Interaction.Behaviors> 
      <behaviors:BlinkingBehavior/> 
     </i:Interaction.Behaviors> 
    </TextBlock> 

, wo das Verhalten einfacher ist:

public class BlinkingBehavior : DependencyObject, IBehavior 
{ 
    public DependencyObject AssociatedObject { get; private set; } 

    public void Attach(DependencyObject associatedObject) 
    { 
     AssociatedObject = associatedObject; 
     InitializeBlinking(); 
    } 

    bool firstcolor = true; 
    private void InitializeBlinking() 
    { 
     var element = AssociatedObject as TextBlock; 

     var brushA = new SolidColorBrush(Colors.Red); 
     var brushB = new SolidColorBrush(Colors.White); 

     UITimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(1000) }; 
     UITimer.Tick += (s, e) => 
     { 
      element.Foreground = firstcolor ? brushA : brushB; 
      firstcolor = !firstcolor; 
     }; 
     UITimer.Start(); 
    } 

    private DispatcherTimer UITimer { get; set; } 

    public void Detach() 
    { 
     if (UITimer != null) UITimer.Stop(); 
    } 
} 

Hinweis: Ich habe es für Windows 10, so dass es ein wenig in Ihrem Fall ändern könnte. Es dauert ein bisschen, bis ich es geschafft habe, also markiere als Antwort, wenn du es wirklich nützlich findest.