扩展WPF按钮功能

时间:2014-07-31 07:49:10

标签: c# wpf xaml

我在MSDN上找到了符合我需要的代码,但是我遇到了问题。 (Here is the code

有一个扩展普通按钮的DoubleClickButton类。我遇到的问题是我不能在xaml中使用这个类。

以下是我的错误: 无效类型:预期类型为“UIElement”,实际类型为“DoubleClickButton”。

我试图在类中更改以继承UIElement(即使按钮是UIElement的事实),也试图仅作为继承而留下UIElement但没有运气。

任何想法,我如何在xaml中使用这个新的增强控件?

此致 Danut

1 个答案:

答案 0 :(得分:2)

这是一个稍微多一点的WPF版本:

public class DoubleClickButton : System.Windows.Controls.Button
{

    [DllImport("user32.dll")]
    static extern uint GetDoubleClickTime();
    // Note that the DoubleClickTime property gets 
    // the maximum number of milliseconds allowed between 
    // mouse clicks for a double-click to be valid.
    int previousClick = (int)GetDoubleClickTime();

    public event EventHandler DoubleClick;

    protected override void OnClick()
    {
        int now = System.Environment.TickCount;

        // A double-click is detected if the the time elapsed
        // since the last click is within DoubleClickTime.
        if (now - previousClick <= (int)GetDoubleClickTime())
        {
            // Raise the DoubleClick event.
            if (DoubleClick != null)
                DoubleClick(this, EventArgs.Empty);
        }

        // Set previousClick to now so that 
        // subsequent double-clicks can be detected.
        previousClick = now;
        base.OnClick();
    }

    // Event handling code for the DoubleClick event.
    protected virtual void OnDoubleClick(EventArgs e)
    {
        if (DoubleClick != null)
            DoubleClick(this, e);
    }
}

编辑使用GetDoubleClickTime()取代了SystemInformation,感谢Andreas Niedermair。

EDIT2 XAML中的示例样式。

<local:DoubleClickButton Content="Test" DoubleClick="DoubleClickButton_OnDoubleClick">
    <local:DoubleClickButton.Style>
        <Style TargetType="{x:Type local:DoubleClickButton}">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </local:DoubleClickButton.Style>
</local:DoubleClickButton>