Tim*_*hyP 5 silverlight xaml behavior expression-blend
我想知道是否有人知道Blend/Silverlight 4的任何好(免费)行为
具体来说,我正在寻找一种行为,我可以放在TextBlock上使其水平滚动或行为将"闪烁"TextBlock中的文本(闪烁文本).但我很想知道你一直在使用或了解的任何行为.
举个例子,我有一个非常基本的"闪烁文本"行为
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();
}
}
Run Code Online (Sandbox Code Playgroud)
当然它可以改进,但我真的对其他人想出的东西感兴趣.
对于滚动文本块我建议如下,因为translatetransform和clipping不太顺利,让我们在xaml中添加:
<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>
Run Code Online (Sandbox Code Playgroud)
现在转换器:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这种方式的最好之处在于,您可以管理滚动结束时要执行的操作。
现在添加闪烁行为
<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>
Run Code Online (Sandbox Code Playgroud)
行为更容易的地方:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我是在 Windows 10 上进行的,因此在您的情况下可能会有所改变。我花了一些时间才完成它,所以如果您发现它确实有用,请标记为答案。
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |