私は C# と VS2008 で作業しています。
FlowDocument を含む WPF アプリケーションがあります。これには、多数のかなり短い行 (つまり、Spans と LineBreaks) を含む段落が含まれています。ただし、線の長さは異なります。FlowDocument の幅は、折り返しなしでこれらの行の中で最も長い行を収容するのに十分な大きさにする必要がありますが、スペースを無駄にしないように幅を広げないようにしたいと考えています。
Width=Auto を使用してグリッド列に配置しても機能しません。FlowDocument はさまざまな幅に合わせて有効に折り返すことができるため、FlowDocument は常に許可されている最大幅を消費します。
コードで行を生成しながら行を調べ、それぞれの幅を計算することはできますが、Span または Run クラスに Width プロパティが表示されません。
このドキュメントの幅を自動または手動で設定する方法についてのアイデアはありますか?
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);
サイジングは今では完璧です。唯一の問題は、フォント ファミリーとフォント サイズが同じ (Segoe UI、15pt) であるにもかかわらず、フォントが隣の FlowDocument とまったく同じに見えないことと、ラベルがよく見えることです。 FlowDocument の行よりも離れています。別の質問としてこれを尋ねました