代码之家  ›  专栏  ›  技术社区  ›  Phillip Ngan

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

  •  7
  • Phillip Ngan  · 技术社区  · 15 年前

    我将一个WPF应用程序移植到Silverlight2,并且遇到了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 回复  |  直到 15 年前
        1
  •  0
  •   KeithMahoney    15 年前

    对于项目1和2,访问这些输入事件的最佳方法是创建一个从内置文本框派生的自定义文本框。然后您可以覆盖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);
        }
    }
    

    与onkeydown类似。

        2
  •  0
  •   BenMaddox    15 年前

    我对Silverlight比完整的WPF更熟悉。请考虑一下我的回答。

    对于2号。对于许多键,我会查看keyup和keydown。我使用key down的同时,试图观察整个时间的关键是被按住和keydup时,它只是使用了一次。你应该知道这是一个没有单独文本框的游戏。

        3
  •  0
  •   Jeff Yates    15 年前

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

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