Я работаю в C # и VS2008.
У меня есть приложение WPF, содержащее FlowDocument, который содержит абзац, который содержит ряд довольно коротких строк (то есть Spans и LineBreaks). Однако длина линий варьируется. Мне бы хотелось, чтобы ширина FlowDocument была достаточно большой, чтобы вместить самую длинную из этих строк без переноса, но не шире, чтобы не тратить пространство.
Помещение в столбец сетки с Width = Auto не работает: FlowDocument всегда использует максимально допустимую ширину, поскольку FlowDocument может корректно переноситься для соответствия разным значениям ширины.
Я мог бы пройтись по строкам, генерируя их в коде, и определить ширину для каждого, но я не вижу свойства Width в классах Span или Run.
Есть идеи, как автоматически или вручную установить ширину для этого документа?
Я использовал предложенную AndrewS идею и перешел из FlowDocument в StackPanel с метками, каждая из которых содержит строку. Разметка XAML
<Border BorderThickness="2" Margin="2" BorderBrush="Black">
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<StackPanel
Orientation="Vertical"
x:Name="itemsStackPanel" />
</ScrollViewer>
</Border>
Код создает пролеты и добавляет их следующим образом:
Label itemLabel = new Label();
// pad left and right, keep close top and bottom
itemLabel.Padding = new Thickness(2,0,2,0);
itemLabel.Content = contentSpan;
this.itemsStackPanel.Children.Add(itemLabel);
Размерирование теперь идеально, и единственное препятствие заключается в том, что шрифт не выглядит точно так же, как рядом с ним FlowDocument, несмотря на то, что семейство шрифтов и размер шрифта совпадают (пользовательский интерфейс Segoe, 15pt), и что Метки выглядят намного дальше друг от друга, чем строки в FlowDocument. Я задал это как отдельный вопрос