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

Phi*_*gan 7 silverlight wpf

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

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

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

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

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

Kei*_*ney 0

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

public class MyTextBox : TextBox
{
    public event MouseButtonEventHandler MySpecialMouseLeftButtonDown;

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

与 OnKeyDown 类似。