拉伸选项卡控件中的中心文本框
Center textbox in a stretched tab control
我正在 WPF 中制作一个多选项卡应用程序,我想制作一个在选项卡网格中水平居中的文本框。选项卡控件当前已拉伸以适合 window 大小,因此如果 window 为 resized/maximized,应用程序也会更改大小。如果我在设计器中按下 "center horizontally" 按钮,它会将文本框置于右侧。我在这里做错了什么?
到目前为止,这是应用程序的 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>
我现在正专注于 "Search" 选项卡。当 window 展开时,文本框(以及任何其他元素)也需要移动,所以我不能只计算中点并设置尺寸。我会做类似 MarginLeft = MainWindow.getWidth/2
或类似的事情,但是 MarginLeft
和 MainWindow
都没有任何可编辑的属性。
我也试过将选项卡中的网格设置为不同的布局,但它不允许我这样做。
如果我没看错,你想将 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
(或将其设置为零)。
我正在 WPF 中制作一个多选项卡应用程序,我想制作一个在选项卡网格中水平居中的文本框。选项卡控件当前已拉伸以适合 window 大小,因此如果 window 为 resized/maximized,应用程序也会更改大小。如果我在设计器中按下 "center horizontally" 按钮,它会将文本框置于右侧。我在这里做错了什么?
到目前为止,这是应用程序的 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>
我现在正专注于 "Search" 选项卡。当 window 展开时,文本框(以及任何其他元素)也需要移动,所以我不能只计算中点并设置尺寸。我会做类似 MarginLeft = MainWindow.getWidth/2
或类似的事情,但是 MarginLeft
和 MainWindow
都没有任何可编辑的属性。
我也试过将选项卡中的网格设置为不同的布局,但它不允许我这样做。
如果我没看错,你想将 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
(或将其设置为零)。