Как я могу принимать вставки из буфера обмена в моем UserControl?

У меня есть UserControl, который, как ни странно, объединяет кучу других элементов управления и логики в небольшой аккуратный пакет. У него есть свойство Text, которое принимает string и творит чудеса, отображая результаты для пользователя. Потрясающий.

Я получаю этот текст из TextBox. Пользователь вставляет текст из буфера обмена в текстовое поле, которое привязано к DP в моем UserControl.

Что я хотел бы сделать, так это вырезать посредника и принимать пасты в моем UserControl.

Я уже пытался использовать DataObject.Pasting прикрепленное событие, но оно не работает.

Как ты делаешь это?


Ответил на мой собственный вопрос с моим текущим решением, но, честно говоря, оно «пахнет». Если у кого-то есть лучший ответ, пожалуйста, добавьте его, и если он работает и лучше, я выберу его.


person Community    schedule 13.08.2010    source источник


Ответы (1)


Мой мозг выстрелил. Привязки команд. Теперь я знаю, когда кто-то пытается вставить, и могу взять его оттуда.

XAML:

<UserControl.CommandBindings>
    <CommandBinding
        Command="Paste"
        Executed="CommandBinding_Executed"/>
</UserControl.CommandBindings>

(извините за плохой код, пока пытаюсь заставить это работать) И обработчик событий:

try
{
    var text = Clipboard.GetData(DataFormats.Text) as string;
    if (string.IsNullOrWhiteSpace(text))
        return;
    Lines = new Lines(text);
    e.Handled = true;
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Paste failed", MessageBoxButton.OK);
}

Это запах, ИМХО. Но я не уверен, как еще справиться с этим.

person Community    schedule 13.08.2010