C# TextBox在添加第二个TextBox后更改其位置
我的Xaml代码:C# TextBox在添加第二个TextBox后更改其位置,c#,wpf,xaml,C#,Wpf,Xaml,我的Xaml代码: <Grid> <Grid.Background> <ImageBrush ImageSource="background.jpg"/> </Grid.Background> <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="52" Margin="10,10,0,0" TextWrapping="Wr
<Grid>
<Grid.Background>
<ImageBrush ImageSource="background.jpg"/>
</Grid.Background>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="52" Margin="10,10,0,0" TextWrapping="Wrap" Text="Welcome to University Portal" VerticalAlignment="Top" Width="456" FontSize="24" FontWeight="Bold" FontStyle="Italic" FontFamily="SimSun" TextAlignment="Center"/>
<TextBlock x:Name="textBlock_Copy" HorizontalAlignment="Left" Height="17" Margin="10,62,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="456" FontWeight="Bold" FontStyle="Italic" FontFamily="SimSun"><Run Text=" * Select your Domain."/></TextBlock>
<Button x:Name="teacher_btn" Content="Teacher" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="50" Margin="10,89,0,0" FontFamily="SimSun" FontSize="22" FontWeight="Bold" FontStyle="Italic" Click="teacher_btn_Click">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
<Button.Background>
<ImageBrush/>
</Button.Background>
</Button>
<Button x:Name="student_btn" Content="Student" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Margin="165,89,0,0" Height="50" FontFamily="SimSun" FontSize="22" FontWeight="Bold" FontStyle="Italic" Click="student_btn_Click">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
<Button.Background>
<ImageBrush/>
</Button.Background>
</Button>
<Button x:Name="exit_btn" Content="Exit" VerticalAlignment="Top" Margin="320,89,0,0" Height="50" FontWeight="Bold" FontStyle="Italic" FontSize="22" FontFamily="SimSun" HorizontalAlignment="Left" Width="150" Click="exit_btn_Click">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
<Button.Background>
<ImageBrush/>
</Button.Background>
</Button>
<Grid Name="container" Margin="10,144,0,0" Height="auto" Width="auto" VerticalAlignment="Top" HorizontalAlignment="Left" />
</Grid>
附加输出图片:更新答案:
好的,您需要在文本块中添加3个元素,并调整密码框的边距
需要将宽度指定给文本块,但您可能会遇到默认文本块行为集水平对齐可能是居中,因此您也需要将其设置为.Left
然后在你的密码框中调整你的边距,这样它就不会被推下另一行,你应该是好的,因为我已经测试了上面的更新来确认
这就是为什么下面的示例更容易使用,让边距在更新后的代码上进行布局是一个非常头痛的问题
通过根据需要设置列和行以及可见性选项,改进设计器中的布局: 使用列和行设置网格,并使用大小调整来处理布局。然后,您的利润可以根据需要保留这些差距 然后,您可以将容器网格与列和行放在一起,布局XAML,并将网格设置为折叠或隐藏(取决于您的需要)。然后单击按钮,可以更改可见性,而不是以编程方式添加元素 这是一个编辑过的版本:(顶部网格实际上不需要指定列,但需要遵循流程)
如果没有可靠地再现问题的良好工具,就不可能说出对象移动的原因。显然,您的容器
以一种添加子容器会导致现有子容器移动的方式来布置其子容器。尽管如此,您无论如何都不应该在代码隐藏中操纵UI。我无法提供任何更具体的信息,只能说您应该在XAML中声明UI,并将视图模型(或视图模型)中的相关数据属性绑定到XAML对象。您希望如何放置控件?垂直地一个接一个地?TextBox
应该放在TextBlock
的前面。当只有一个TextBlock
和一个TextBox
时,它可以正常工作,但当我添加新的TextBox
时,它会先拉TextBox
。
TextBlock name_block = new TextBlock();
name_block.Text = "Enter your ID : ";
name_block.Margin = new Thickness(5, 8, 0, 0);
container.Children.Add(name_block);
TextBox name_box = new TextBox();
name_box.Width = 200;
name_box.Height = 25;
name_box.Margin = new Thickness(150, 5, 1, 1);
container.Children.Add(name_box);
TextBlock pass_block = new TextBlock();
pass_block.Text = "Enter your password : ";
pass_block.Margin = new Thickness(5, 78, 0, 0);
container.Children.Add(pass_block);
PasswordBox pass_box = new PasswordBox();
pass_box.Width = 200;
pass_box.Height = 25;
pass_box.Margin = new Thickness(150, 75, 0, 0);
container.Children.Add(pass_box);
Button login_btn = new Button();
login_btn.Content = "Login";
login_btn.Height = 25;
login_btn.Margin = new Thickness(150, 150, 0, 0);
container.Children.Add(login_btn);
login_btn.Click += Teacher_Login_btn_Click;
<Grid> <!--Notice I added columns and rows to set layout instead of relaying on your margins-->
<Grid.Background>
<ImageBrush ImageSource="background.jpg" Opacity="75"/>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="25"/>
<RowDefinition Height="75"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TextBlock x:Name="textBlock" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Height="52" Margin="10,10,0,0" TextWrapping="Wrap" Text="Welcome to University Portal" VerticalAlignment="Top" Width="456" FontSize="24" FontWeight="Bold" FontStyle="Italic" FontFamily="SimSun" TextAlignment="Center"/>
<TextBlock x:Name="textBlock_Copy" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Height="17" Margin="5,5,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="456" FontWeight="Bold" FontStyle="Italic" FontFamily="SimSun"><Run Text=" * Select your Domain."/></TextBlock>
<Button x:Name="teacher_btn" Grid.Column="0" Grid.Row="2" Content="Teacher" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="50" Margin="10,9,0,0" FontFamily="SimSun" FontSize="22" FontWeight="Bold" FontStyle="Italic" Click="teacher_btn_Click">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
<Button.Background>
<ImageBrush/>
</Button.Background>
</Button>
<Button x:Name="student_btn" Grid.Column="0" Grid.Row="2" Content="Student" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Margin="165,9,0,0" Height="50" FontFamily="SimSun" FontSize="22" FontWeight="Bold" FontStyle="Italic" Click="student_btn_Click">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
<Button.Background>
<ImageBrush/>
</Button.Background>
</Button>
<Button x:Name="exit_btn" Grid.Column="0" Grid.Row="2" Content="Exit" VerticalAlignment="Top" Margin="320,9,0,0" Height="50" FontWeight="Bold" FontStyle="Italic" FontSize="22" FontFamily="SimSun" HorizontalAlignment="Left" Width="150" Click="exit_btn_Click">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
<Button.Background>
<ImageBrush/>
</Button.Background>
</Button>
<!--Build out the grid and set it to collapsed to give back the space or Hidden if you want to keep the space-->
<Grid Name="container" Grid.Column="0" Grid.Row="3" Height="auto" Width="auto" VerticalAlignment="Top" HorizontalAlignment="Left" Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*"/>
<ColumnDefinition Width="75*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label x:Name="lblID" Content="Enter your ID: " Grid.Column="0" Grid.Row="0" Margin="5,25,45,4"/>
<Label x:Name="lblPW" Content="Enter your Password: " Grid.Column="0" Grid.Row="1" Margin="5,4,45,25"/>
<TextBox x:Name="txtbxUserID" Grid.Column="1" Grid.Row="0" Width="200" Height="25" Margin="25,25,25,4"/>
<PasswordBox x:Name="txtbxPW" Grid.Column="1" Grid.Row="1" Width="200" Height="25" Margin="25,4,25,25"/>
</Grid>
</Grid>