Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TextBox在添加第二个TextBox后更改其位置_C#_Wpf_Xaml - Fatal编程技术网

C# TextBox在添加第二个TextBox后更改其位置

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

我的Xaml代码:

 <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>