Дельфи (иначе Object Pascal), я буду говорить о собственной версии, не.NET.
try except finally end;
слишком явное Создание объекта:
var obj: TMyObject;
...
obj := TMyObject.Create;
try
...
finally
obj.Free;
end;
Вместо этого что-то как [1 112]
auto obj: TMyObject; // compiler adds the default constructor call and the destructor call in a try/finally block.
i.ToString
вместо IntToStr(i)
. То, что вы ищете, возможно, но требует значительного количества кода. К счастью, Винсент Ван Ден Берг опубликовал в MSDN прекрасную статью, описывающую, как создавать гибкие пользовательские интерфейсы с потоковыми документами и привязкой данных , включая код!
Вместо использования FlowDocument
вы можете использовать ItemsControl
и изменить панель, используемую для отображения элементов, на WrapPanel . Это позволит вам использовать ItemsControl
по своему усмотрению, но изменить семантику его отображения на WrapPanel
(которая, как мне кажется, работает как FlowDocument
. Вы бы сделали это это примерно так:
<ItemsControl>
<ItemsControl.ItemsPanelTemplate>
<WrapPanel />
</ItemsControl.ItemsPanelTemplate>
</ItemsControl>
Вы можете установить любые свойства на внутренней WrapPanel
по своему желанию.
Думаю, вы ищете элемент списка: http://msdn.microsoft.com/en-us/library/system.windows.documents.list.aspx
Bubblewrap указывает еще на несколько деталей. Скорее всего, вы выполните привязку к свойству ListItems и вам потребуется использовать ValueConverter для преобразования исходного списка в список типа ListItemsCollection.
Bubblewrap указывает, что это только для чтения и что ListItemsCollection имеет внутренний конструктор. Итак ...
Я думаю, что вам нужно сделать следующее:
<ContentControl Content="{Binding TheArrayOfText, Converter={StaticResource StringsToListConverter}" />
Это довольно прискорбно, но я думаю, что это сработает. Вам придется написать конвертер для создания нового объекта List и вызвать .Add (
для каждого элемента.