Необходимо написать программу для отображения данных из буфера обмена (для проверки сохранения объектов).
В буфер сохраняются данных в несколько потоков (text, unicode, html, rtf, bitmap, "свой бинарный формат", и так далее).
Данные вытащить из буфера не проблема, но столкнулся с эстетической проблемой отображения информации в tabcontrol. Для каждого потока формируется своя закладка со своим наполнением в зависимости от типа отображаемых данных. Например для потока text или unicode отображается просто richtextbox, для rft - два richtextbox с отображением в виде текста и в виде отрендеренного rtf. Для картинки соответственно image с картинкой и textbox с байтами в "hex"-формате.
Полистав немного интернет, нашел одно решение, использовать itemtemplateselector, но некоторые говорят, это не очень хорошая идея использовать его для большого выбора (в моем случае я не знаю на сколько это будет большой выбор, но десяток форматов будет).
Хотелось бы добавить гибкости, для простого добавления отображения новых форматов.
Стоит ли продолжать используя itemtemplateselector или для моего решения лучше использовать какой-то иной подход?
Ответ
Стандартная альтернатива — использование 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 для данного типа в каждый из словарей.
Комментариев нет:
Отправить комментарий