Обходной путь для некоторых функций WPF, отсутствующих в Silverlight - PullRequest
7 голосов
/ 17 февраля 2009

Я портирую приложение WPF на silverlight 2 и обнаружил несколько функций WPF, которые в настоящее время отсутствуют в SL. Может ли кто-нибудь помочь мне с эквивалентами или предложить обходные пути.

  1. Я хочу обрабатывать щелчки и двойные щелчки в текстовом поле, встроенном в список. Реализация WPF использует PreviewMouseLeftButtonDown / Up для элемента управления списка. Как это можно сделать в Silverlight, кажется, что PreviewMouseLeftButtonDown / Up отсутствует в Silverlight.

  2. Я хочу обрабатывать нажатия кнопок (F2 / Удалить) в текстовом поле, встроенном в список. Реализация WPF использует PreviewKeyDown для элемента управления textbox, который встроен как элемент в список. Кажется, что PreviewKeyDown отсутствует в Silverlight. Кажется, что обработчик события KeyDown не вызывается.

  3. Я хочу изменить некоторые свойства внешнего вида текстового поля в зависимости от значения некоторых пользовательских прикрепленных свойств. Реализация WPF использует DataTrigger для этого. Как это можно сделать в серебряном свете. Похоже, что DataTriggers отсутствуют в Silverlight.

  4. Я хочу изменить ширину текстового поля в зависимости от фактической ширины списка, в котором содержится текстовое поле. Реализация WPF использует привязку RelativeSource. Что является эквивалентом Silverlight или обходным путем для этого.

Ответы [ 3 ]

0 голосов
/ 17 февраля 2009

Для элемента 4 вы можете привязать ширину списка и ширину текстового поля к свойству статического ресурса, чтобы он действовал как маршрутизатор для привязки. Вы также можете использовать конвертер значений , который вы инициализируете ссылкой на список, а затем использовать конвертер для ширины вашего текстового поля.

Для пункта 3 вы можете использовать аналогичный подход.

0 голосов
/ 17 февраля 2009

Для элементов 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.

0 голосов
/ 17 февраля 2009

Я больше знаком с Silverlight, чем с полным WPF. Пожалуйста, рассмотрите мои ответы соответственно.

Для номера 2. Для многих ключей я проверяю KeyUp и KeyDown. Я использую KeyDown, пытаясь наблюдать все время, пока клавиша удерживается нажатой, и KeyUp, когда он использовался только один раз. Вы должны знать, что это было для игры без отдельного текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...