解决Silverlight中缺少的某些WPF功能的问题

时间:2009-02-16 21:11:38

标签: wpf silverlight

我正在将一个WPF应用程序移植到silverlight 2,并且遇到了一些目前在SL中缺少的WPF功能。任何人都可以帮我提供等价物或建议解决方法。

  1. 我想处理列表框中嵌入的文本框的点击和双击。 WPF实现在列表框控件上使用PreviewMouseLeftButtonDown / Up。怎么能在silverlight中完成,似乎在Silverlight中缺少PreviewMouseLeftButtonDown / Up。

  2. 我想在列表框中嵌入的文本框上处理按钮按下(F2 / Delete)。 WPF实现在文本框控件上使用PreviewKeyDown,该控件作为项目嵌入在列表框中。似乎Silverlight中缺少PreviewKeyDown。似乎没有调用KeyDown事件处理程序。

  3. 我想根据某些自定义附加属性的值更改文本框的某些外观属性。 WPF实现使用DataTrigger来执行此操作。怎么能在silverlight中完成。似乎在Silverlight中缺少DataTriggers。

  4. 我想根据包含文本框的列表框的实际宽度来更改文本框的宽度。 WPF实现使用RelativeSource绑定。什么是silverlight等价物或解决方法。

3 个答案:

答案 0 :(得分:0)

我比完整的WPF更熟悉Silverlight。请相应地考虑我的回答。

对于数字2.对于许多键,我检查KeyUp和KeyDown。我在尝试观察按键的整个时间时使用KeyDown,而在仅使用一次时使用KeyUp。你应该知道这是一个没有单独文本框的游戏。

答案 1 :(得分:0)

对于第4项,您可以将列表框宽度和文本框宽度绑定到静态资源的属性,以便它充当绑定的路由器。您还可以使用通过引用列表框初始化的value converter,然后使用转换器作为文本框宽度。

对于第3项,您可以使用类似的方法。

答案 2 :(得分:0)

对于第1项和第2项,访问这些输入事件的最佳方法是创建从内置TextBox派生的自定义TextBox。然后你可以覆盖OnKeyDown和OnMouseLeftButton。从那里你可以调用必要的代码,或者发起一个新的事件。 e.g:

public class MyTextBox : TextBox
{
    public event MouseButtonEventHandler MySpecialMouseLeftButtonDown;

    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
    {
        if (MySpecialMouseLeftButtonDown != null)
        {
            MySpecialMouseLeftButtonDown(this, e);
        }
        base.OnMouseLeftButtonDown(e);
    }
}

与OnKeyDown类似。