网格列中的wpf文本块自动调整大小

lh80um4z  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(302)

我试图布局的设计,其中的文本块需要增长/收缩时,我们最大化的应用程序。
在我的设计中,网格有4列和2行。第二行中的文本块相对于主窗口大小增长/收缩。
但不是第一行中的文本块。值为Stretch或Right的TextAlignment或HorizontalAlignment属性没有帮助。
有人能指导我如何使第一行的文本块

  • 填写第1和第2栏
  • 当我们最大化应用程序时增长/收缩
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="600">
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition  Width="Auto"/>
            <ColumnDefinition  Width="Auto"/>
            <ColumnDefinition  Width="Auto"/>
            <ColumnDefinition  Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="120"/>
        </Grid.RowDefinitions>
        <CheckBox Name="Enable" Content="Enable" Width="70" Height="20" Margin="1,0,0,0" Grid.Row="0" Grid.Column="0"></CheckBox>
        <Border Margin="2" BorderBrush="Black" BorderThickness="1" Height="20" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" >
            <TextBlock Name="Status" Text="current status" TextAlignment="Right" HorizontalAlignment="Right"></TextBlock>
        </Border>
        <Button x:Name="Clear" Content="Clear"  Width="40" Height="20" Margin="1,0,2,0" HorizontalAlignment="Right" ToolTip="clear" Grid.Row="0" Grid.Column="3">            
        </Button>
        <Border Margin="2" BorderBrush="Black" BorderThickness="1"  Height="110" Grid.ColumnSpan="4" Grid.Row="1" Grid.Column="0">
            <ScrollViewer>
                <TextBlock Name="ActionText" Text="" TextWrapping="Wrap">
                </TextBlock>
            </ScrollViewer>
        </Border>
    </Grid>
</Window>

bksxznpy

bksxznpy1#

好吧,这有点让人困惑,但我想我看到了问题所在。
首先,第1列和第2列都设置为Auto大小,这意味着它们将大小设置为其中的Content。第1列和第2列的TextBlock表示“当前状态”,我猜这就是您想要更改的状态。
为此,请将第1列和第2列设置为比例大小模式(1*、2* 等)。尝试一些值,以找到适合您的用例的值。
接下来,您需要将这个TextBlock放入ViewBox中,这样视觉效果将自动增长和收缩到它拥有的可用空间。
最后,充分利用MaxWidthMinWidth属性,以确保将Window调整为任何大小都不会导致TextBlock变得太大/太小。
作为补充,我建议您删除包含名为 ActionTextTextBlockScrollViewer,并将其替换为TextBox,并将ReadOnly属性设置为true
我已经应用了这些建议,结果是我相信你的意图。注意我还调整了列以删除不需要的列,并将它们的比例大小权重设置为一些建议值,您可以根据需要进行调整。

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition  Width="Auto"/>
            <ColumnDefinition  Width="1*" MaxWidth="200" MinWidth="75"/>
            <ColumnDefinition  Width="5*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="30" MaxHeight="35" Height="1*"/>
            <RowDefinition Height="120"/>
        </Grid.RowDefinitions>
        <CheckBox Name="Enable" Content="Enable" Width="70" Height="20" Margin="1,0,0,0" Grid.Row="0" Grid.Column="0"></CheckBox>
        <Border BorderBrush="Black" BorderThickness="1" Margin="2,5" Grid.Row="0" Grid.Column="1" >
            <Viewbox>
                <TextBlock Name="Status" Text="current status"></TextBlock>
            </Viewbox>
        </Border>
        <Button x:Name="Clear" Content="Clear"  Width="40" Height="20" Margin="1,0,2,0" HorizontalAlignment="Right" ToolTip="clear" Grid.Row="0" Grid.Column="3">
        </Button>
        <TextBox IsReadOnly="true" VerticalScrollBarVisibility="Visible" Margin="2" BorderBrush="Black" BorderThickness="1"  Height="110" Grid.ColumnSpan="4" Grid.Row="1" Grid.Column="0" Name="ActionText" Text="" TextWrapping="Wrap"/>
    </Grid>

相关问题