【问题标题】:Silverlight: MouseLeftButtonDown timer to repeatedly fire an eventSilverlight:用于重复触发事件的 MouseLeftButtonDown 计时器
【发布时间】:2009-04-11 06:07:55
【问题描述】:

我正在尝试创建自定义滚动条并使用图像作为按钮。

现在是一个简单的

我可以很好地处理 MouseLeftButtonDown 和 Up 事件,但我想做的是在按住它的同时,每隔几毫秒触发一个事件。

我尝试了类似的方法,但效果不佳。有什么建议吗?

public delegate void Changed(RangeScrollButtonControl sender, int value);
public event Changed OnChanged;
private System.Threading.Timer Timer;

private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    this.Timer = new System.Threading.Timer(Timer_Callback, null, 0, 100);
}

private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    this.Timer = null;
}

private void Timer_Callback(object sender)
{
    if (this.OnChanged != null) 
    {
        this.OnChanged(this, 1);
    }
}

【问题讨论】:

    标签: silverlight events silverlight-3.0 user-controls scrollbar


    【解决方案1】:

    您正在寻找的功能是一个RepeatButton,它会在按住鼠标按钮时重复触发它的Click 事件。您可以配置事件的延迟和间隔。

    然后您可以设置此按钮的样式以使用Silverlight Show 处的图像

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      哪一块“不太好用”?

      另外,您能否重新设计或重新设计 Silverlght 的滚动条,类似于在 blog post 中看到的内容,以获得您需要的内容?

      【讨论】:

      • 看来 Timer 对象不是线程安全的,我遇到了跨线程异常。解决方案是使用 DispatchTimer,现在它工作正常。
      【解决方案3】:

      我会使用 Storyboard 作为计时器。比如:

      然后你可以做一个 MouseSTB.Begin。故事板完成后,您可以在 MouseSTB.Completed 事件中捕捉它。在那种情况下,您可以做任何您需要做的事情,然后重新开始。它可以通过在 mouseover、mouseenter 和 mouseleave 事件上设置一些标志来轻松控制。我在很多地方都使用了这些计时器,它们工作得很好,而且不会与处理器挂钩。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        相关资源
        最近更新 更多