文本框不会拉伸以填充视图框

Bla*_*ord 7 forms wpf layout textbox viewbox

我希望我的LOB表单中的标签和文本框的字体大小随着窗口大小调整或分辨率更改而增大和缩小.为此,我将标签和文本框放在了视图框中.

标签和自定义单选按钮的行为符合我的预期,但文本框不会水平拉伸以填充视图框(抱歉,由于rep而无法发布图像).如果您键入文本框,文本框将水平填充视图框.

以下是我正在使用的代码示例:

  <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.186*"/>
            <ColumnDefinition Width="0.814*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.127*"/>
            <RowDefinition Height="0.873*"/>
        </Grid.RowDefinitions>
        <Viewbox Margin="0,0,0.917,0">
            <Label Content="First name:"/>
        </Viewbox>
        <Viewbox Grid.Column="1">
            <TextBox TextWrapping="Wrap"/>
        </Viewbox>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

我已经尝试在视图框中放置网格,stackpanel和dockpanel(使用LastChildFill ="True"),然后将文本框放在这些布局控件中,但这也不起作用.反正有没有让文本框水平填充父视图框?

此问题与此类似:WPF TextBox不会填写StackPanel,但此问题与stackpanels有关,而不是viewboxes.

dow*_*for 10

我认为你想要的并不容易.ViewBox告诉它的孩子他们在布局的测量过程中有空间.之后,显示适合视图框.现在一个文本框,告诉有无限空间,显然无法拉伸.我有2个解决方案,我认为这不是你想要的,但无论如何可能会有所帮助.

首先:

<Viewbox Grid.Column="1" Grid.Row="0" Stretch="Uniform" >
    <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Viewbox}}, Path=ActualWidth}">
      <TextBox TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </Grid>
</Viewbox>
Run Code Online (Sandbox Code Playgroud)

这将拉伸文本框infact,但禁用视图框中预期的行为.为什么?我们告诉ViewBox保持纵横比,并设置文本框以填充视图框的整个宽度,从而保持文本框的大小.

第二:

将从标签中添加一个高度到网格,使用其视图框的scaletransform进行修改.

这个我还没试过,但它会涉及一个价值转换器.

总结:由于viewbox布局其子项的方式,没有简单的方法来实现您想要的.如果您只想水平拉伸,我的第一个解决方案可以正常工作,如果您想要缩放.我的猜测是你必须自己做.