【问题标题】:Center textbox in a stretched tab control在拉伸选项卡控件中居中文本框
【发布时间】:2026-01-03 04:30:02
【问题描述】:

我正在 WPF 中创建一个多选项卡应用程序,并且我想在选项卡的网格中创建一个水平居中的文本框。选项卡控件当前被拉伸以适应窗口大小,因此如果调整窗口大小/最大化,应用程序也会改变大小。如果我在设计器中按下“水平居中”按钮,它会将文本框放在右侧。我在这里做错了什么?

这是迄今为止应用的 XAML 代码:

<Window x:Class="GUI_Test.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:GUI_Test"
        mc:Ignorable="d"
        Title="MainWindow" Height="524" Width="996.432">
    <Grid>
        <TabControl x:Name="tabControl" HorizontalContentAlignment="Center">
            <TabItem x:Name="Home" Header="Home" Width="150">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem x:Name="Dictionary" Header="Dictionary" Width="150">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem x:Name="Search" Header="Search" Height="20" Width="150">
                <Grid Background="#FFE5E5E5">
                    <TextBox x:Name="textBox" HorizontalAlignment="Center" Height="23" Margin="524,105,204,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="250"/>
                </Grid>
            </TabItem>
            <TabItem x:Name="About" Header="About" Height="20" Width="150">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

此时我专注于“搜索”标签。当窗口展开时,文本框(以及任何其他元素)也需要移动,所以我不能只计算中点并设置尺寸。我会做类似MarginLeft = MainWindow.getWidth/2 或类似的事情,但既没有MarginLeft 也没有MainWindow 具有任何可编辑属性。 我还尝试将选项卡中的网格设置为不同的布局,但它不允许我这样做。

【问题讨论】:

  • 请给我们看一些代码。见*.com/help/mcve
  • 谢谢。它已被编辑。抱歉,我还不太熟悉 * 的规则:)
  • 删除文本框的边距。

标签: c# wpf xaml textbox tabcontrol


【解决方案1】:

如果我说得对,并且您想将TextBox 水平集中在Grid 上,您只需将HorizontalAlignment 设置为Center 并删除左右两侧的Margin (第一个和第三个数字),像这样:

<TextBox x:Name="textBox" HorizontalAlignment="Center" Height="23" Margin="0,105,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="250"/>

强调Margin="0,105,0,0",这与您的代码不同。

如果您也想垂直集中,只需将VerticalAlignment 设置为Center 并完全删除Margin(或将其设置为零)。

【讨论】:

  • 成功了,谢谢。我知道问题出在哪里,存在利益冲突。