让TextBox拉伸以填充StackPanel中的宽度

Mat*_*ias 29 xaml textbox stackpanel microsoft-metro windows-runtime

我有一个StackPanel在我的WinRT C#Metro应用程序中,我想用作标签/值对的容器(TextBlockTextBox),如下所示:

<StackPanel Orientation="Horizontal" Width="400">
    <TextBlock Text="Label" Width="150" />
    <TextBox Text="Value" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

现在我想要的是让TextBox自动填充StackPanel的剩余水平空间.这有可能吗?HorizontalAlignment/ HorizontalContentAlignment不工作.

我知道另一种方法是为此定义一个Grid.问题是我有几次构造,并希望在Style定义中使用它.我不想用行和列x次定义Grid的定义...

也许替代方案是定义一个自定义用户控件,但我希望有一个简单的可能性TextBox来扩展.

Dea*_*alk 24

不幸的是,替代方案(DockPanel)不适用于Metro.你可以试试WrapGrid,但我不知道它是否会解决你的问题(我从来没用过它).

这样做的唯一真正方法是使用您描述的网格:

<Grid Width="400">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <TextBlock Text="Label" Width="150" />
    <TextBox Text="Value" Grid.Column="1" />
</Grid>
Run Code Online (Sandbox Code Playgroud)


Uяo*_*Koт 20

我不确定你投入HorizontalAlignment了哪个元素,但这对我有用:

<StackPanel>
    <TextBlock Text="Title" Style="..."/>
    <TextBlock Margin="0,0,0,10" Text="Description" Style="..."/>
    <TextBox HorizontalAlignment="Stretch" />
    <Button Margin="0" Content="Save"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

这延伸TextBox到整个宽度StackPanel.

  • 我认为这是正确的答案,只需根据您的 StackPanel 方向使用 VerticalAlignment="Stretch" 或 Horizo​​ntalAlignment="Stretch" (2认同)