Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Отображение данных из буфера обмена

#c_sharp #wpf


Необходимо написать программу для отображения данных из буфера обмена (для проверки
сохранения объектов).

В буфер сохраняются данных в несколько потоков (text, unicode, html, rtf, bitmap,
"свой бинарный формат", и так далее). 

Данные вытащить из буфера не проблема, но столкнулся с эстетической проблемой отображения
информации в tabcontrol. Для каждого потока формируется своя закладка со своим наполнением
в зависимости от типа отображаемых данных. Например для потока text или unicode отображается
просто richtextbox, для rft - два richtextbox с отображением в виде текста и в виде
отрендеренного rtf. Для картинки соответственно image с картинкой и textbox с байтами
в "hex"-формате. 

Полистав немного интернет, нашел одно решение, использовать itemtemplateselector,
но некоторые говорят, это не очень хорошая идея использовать его для большого выбора
(в моем случае я не знаю на сколько это будет большой выбор, но десяток форматов будет).

Хотелось бы добавить гибкости, для простого добавления отображения новых форматов.

Стоит ли продолжать используя itemtemplateselector или для моего решения лучше использовать
какой-то иной подход? 
    


Ответы

Ответ 1



Стандартная альтернатива — использование DataTemplate по умолчанию. Для этого определим словари, которые будут показывать, как отображается заголовок и контент каждого типа, и поместим их в ResourceDictionary. Пускай у нас есть два типа: string и RtfString class RtfString { public string Content { get; set; } } и наш DataContext выглядит так: new object[] { "I'm string", new RtfString() { Content = "I'm RTF" }, "I'm another string" } Тофда определения для отображаемых типов такие: FormatNames.xaml: Formats.xaml: Ну и TabControl: Результат: Для добавления новых типов контента нужно положить новый DataTemplate для данного типа в каждый из словарей.

Комментариев нет:

Отправить комментарий