【问题标题】:Workaround for some WPF features that are missing in SilverlightSilverlight 中缺少的某些 WPF 功能的解决方法
【发布时间】:2010-10-07 23:52:36
【问题描述】:

我正在将 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 等效项或解决方法。

【问题讨论】:

  • 你会投票选出你认为最有用的答案吗?

标签: wpf silverlight


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      public class MyTextBox : TextBox
      {
          public event MouseButtonEventHandler MySpecialMouseLeftButtonDown;
      
          protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
          {
              if (MySpecialMouseLeftButtonDown != null)
              {
                  MySpecialMouseLeftButtonDown(this, e);
              }
              base.OnMouseLeftButtonDown(e);
          }
      }
      

      与 OnKeyDown 类似。

      【讨论】:

      • 这不是 WPF 中预览事件的工作方式。由于 WPF 已路由事件,因此预览事件从根元素(例如窗口)向下传输到最终接收器(例如文本框),这使更高的元素可以选择在事件到达文本框之前拦截事件。
      • 是的。调用事件 PreviewMouseLeftButtonDown 不是一个好主意。但它可以解决线程启动器的问题。我将编辑答案以消除可能造成混淆的根源。
      • 这对我也有帮助,+1。
      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 2010-09-22
      • 1970-01-01
      • 2013-10-16
      • 2015-11-14
      • 2017-04-04
      • 2014-03-16
      相关资源
      最近更新 更多