C# 如何在WPF中用文本块填充屏幕,但如果更大,如何让它添加滚动条?

C# 如何在WPF中用文本块填充屏幕,但如果更大,如何让它添加滚动条?,c#,wpf,xaml,C#,Wpf,Xaml,我的WPF应用程序中有以下XAML代码 <StackPanel DockPanel.Dock="Top" > <TextBlock Style="{StaticResource HeaderTextBlock}">Import Log</TextBlock> <ScrollViewer Height="400" VerticalScrollBarVisibility="Auto"> <TextBlock Na

我的WPF应用程序中有以下XAML代码

<StackPanel DockPanel.Dock="Top" >
    <TextBlock Style="{StaticResource HeaderTextBlock}">Import Log</TextBlock>
    <ScrollViewer Height="400" VerticalScrollBarVisibility="Auto">
        <TextBlock  Name="ImportFeedBack"></TextBlock>
    </ScrollViewer>
</StackPanel>

导入日志
它分析
ImportFeedBack
字符串(如果有人想知道,我正在使用
Caliburn.Micro
作为MVVM框架,以便
TextBlock
的内容通过命名约定绑定到我的ViewModel中同名的属性)

该值的长度变化很大。我希望它使用整个可用空间(但不应该调整应用程序的大小!),只有在这还不够的情况下,才添加一个垂直滚动条

如果我在
ScrollViewer
中删除
Height=“400”
,它会根据大字符串调整应用程序的大小,如果我将其保留在那里,它(显然)只使用400高度,但在需要时会使用滚动条


我如何才能让它使用所有可用空间,并且仅在这还不够的情况下,创建一个垂直滚动条?

而不是
堆栈面板
使用不同的面板,如
网格
DockPanel
。在下面的示例中,第二行将占用第一行未分配的所有可用空间,并且不会超出文本较长时滚动条应显示的空间

<Grid DockPanel.Dock="Top" >
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <TextBlock Grid.Row="0" Style="{StaticResource HeaderTextBlock}">Import Log</TextBlock>
    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
        <TextBlock  Name="ImportFeedBack"></TextBlock>
    </ScrollViewer>
</Grid>

导入日志

将窗口的
ResizeMode
设置为
NoResize
。但是用户是否仍可以按照自己的意愿调整应用程序的大小?谢谢。这几乎奏效(我尝试了
DockPanel
方法)-第一次更新字符串时,它将应用程序的大小调整为全屏高度,然后应用
ScrollViewer
,如果我随后将应用程序缩小并请求新日志,它将保持该大小,然后应用
ScrollViewer
。有什么想法吗?你能解释一下,它将应用程序调整到全屏高度,然后应用ScrollViewer是什么意思吗?这里没有调整大小。好吧,在启动应用程序后,高度为,比如说300。我单击一个更新日志字符串的按钮,然后应用程序立即垂直填充屏幕。宽度保持不变。但由于日志更长,它还额外添加了一个垂直滚动条(这很好-以前,使用
StackPanel
,应用程序的大小甚至比屏幕更大!),那么哪一位不起作用呢?调整应用程序大小时会发生什么情况?发生了什么,应该发生什么?宽度和/或高度错误?嗯,当内容改变时,它不应该调整应用程序的大小。因此,当它调整到全高时,第一个行为是不需要的。正如我所说的,如果用户随后调整大小(通过单击边框并用鼠标拖动),那么应用程序将遵守新的大小,而不会更改。