如何将 TexTbox 设置为根据 TextBlock 自动调整大小。 WPF
How to set TexTbox to resize automatically depending on TextBlock. WPF
我想制作类似 TextBlock 的东西,并且在它前面有一个 TextBox。
但是,我的应用程序是可本地化的,因此 TextBlock 有时可以包含长文本,有时可以包含短文本,因此我希望文本框根据 TextBlock 的宽度自动调整自身大小。
我试着用堆栈面板来做,但失败了 xD:
<StackPanel Orientation="Horizontal" Width="auto" Height="auto">
<TextBlock HorizontalAlignment="Left" Margin="10,10,0,0" Text="{Resx Key=TextBlock_ProjectName}"/>
<TextBox x:Name="ProjectNameTextBox" HorizontalAlignment="Right" Margin="10,10,0,0" MinWidth="770" MaxWidth="770"/>
</StackPanel>
每当文本块获得更大的文本时,文本框实际上会向右移动并且不会调整大小..
我只需要被推向正确的方向,任何帮助都将不胜感激。
E:我当前使用网格的代码:
<Grid>
<Menu x:Name="menu" Height="34" VerticalAlignment="Top" HorizontalAlignment="Left" Width="885" Grid.ColumnSpan="2">
<MenuItem Header="{Resx Key=StartupForm_MenuItem_OpenGlobalSettings}" Height="34"/>
</Menu>
<TabControl x:Name="MainTabControl" Height="297" Margin="0,39,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="887" Grid.ColumnSpan="2">
<TabItem Header="{Resx Key=StartupForm_TabItem_NewProject}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" MinWidth="770" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="10,10,0,0" Text="{Resx Key=StartupForm_TextBlock_ProjectName}"/>
<TextBox Grid.Column="1" x:Name="ProjectNameTextBox" Margin="10,10,0,0"/>
<TextBlock Grid.Column="0" HorizontalAlignment="Left" Margin="10,47,0,0" TextWrapping="Wrap" Text="{Resx Key=StartupForm_TextBlock_SAMPVersion}" VerticalAlignment="Top"/>
<ListBox Grid.Column="1" x:Name="listBox" HorizontalAlignment="Left" Height="111" VerticalAlignment="Top" Width="765" Margin="105,47,0,0" BorderBrush="{DynamicResource ControlBorderBrush}" BorderThickness="1" />
<TextBlock Grid.Column="0" x:Name="textBlock2" HorizontalAlignment="Left" Margin="10,191,0,0" TextWrapping="Wrap" Text="Project Location: " VerticalAlignment="Top"/>
<CheckBox Grid.Column="1" x:Name="checkBox" Content="Create from pre-existing files." Margin="105,162,-95,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/>
<controls1:PathTextBox Grid.Column="1" x:Name="textBox1" Height="28" Margin="105,0,11,39" VerticalAlignment="Bottom" Width="765" RenderTransformOrigin="0.075,-0.154" IsDirectory="True" TheDesc="Please choose a directory for the project."/>
<Button x:Name="button1" Content="Create Project" HorizontalAlignment="Left" Margin="10,219,0,0" VerticalAlignment="Top" Width="861" Style="{DynamicResource AccentedSquareButtonStyle}"/>
</Grid>
</TabItem>
<TabItem Header="Load Project"/>
<TabItem Header="Recent"/>
</TabControl>
</Grid>
改为使用 DockPanel。
<DockPanel>
<TextBlock HorizontalAlignment="Left" Margin="10,10,0,0" Text="{Resx Key=TextBlock_ProjectName}"/>
<TextBox x:Name="ProjectNameTextBox" HorizontalAlignment="Right" Margin="10,10,0,0" MinWidth="770" MaxWidth="770"/>
</DockPanel>
就像评论中 Karmacon 所建议的那样,使用 Grid 最简单。 (编辑:也许不是最简单的,但它可能是提供您需要的确切结果的方法)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" MinWidth="770" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="10,10,0,0" Text="{Resx Key=TextBlock_ProjectName}"/>
<TextBox Grid.Column="1" x:Name="ProjectNameTextBox" Margin="10,10,0,0"/>
</Grid>
当然,我根据一些假设做了一些修改,我认为这是很明显的。
我想制作类似 TextBlock 的东西,并且在它前面有一个 TextBox。 但是,我的应用程序是可本地化的,因此 TextBlock 有时可以包含长文本,有时可以包含短文本,因此我希望文本框根据 TextBlock 的宽度自动调整自身大小。
我试着用堆栈面板来做,但失败了 xD:
<StackPanel Orientation="Horizontal" Width="auto" Height="auto">
<TextBlock HorizontalAlignment="Left" Margin="10,10,0,0" Text="{Resx Key=TextBlock_ProjectName}"/>
<TextBox x:Name="ProjectNameTextBox" HorizontalAlignment="Right" Margin="10,10,0,0" MinWidth="770" MaxWidth="770"/>
</StackPanel>
每当文本块获得更大的文本时,文本框实际上会向右移动并且不会调整大小..
我只需要被推向正确的方向,任何帮助都将不胜感激。
E:我当前使用网格的代码:
<Grid>
<Menu x:Name="menu" Height="34" VerticalAlignment="Top" HorizontalAlignment="Left" Width="885" Grid.ColumnSpan="2">
<MenuItem Header="{Resx Key=StartupForm_MenuItem_OpenGlobalSettings}" Height="34"/>
</Menu>
<TabControl x:Name="MainTabControl" Height="297" Margin="0,39,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="887" Grid.ColumnSpan="2">
<TabItem Header="{Resx Key=StartupForm_TabItem_NewProject}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" MinWidth="770" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="10,10,0,0" Text="{Resx Key=StartupForm_TextBlock_ProjectName}"/>
<TextBox Grid.Column="1" x:Name="ProjectNameTextBox" Margin="10,10,0,0"/>
<TextBlock Grid.Column="0" HorizontalAlignment="Left" Margin="10,47,0,0" TextWrapping="Wrap" Text="{Resx Key=StartupForm_TextBlock_SAMPVersion}" VerticalAlignment="Top"/>
<ListBox Grid.Column="1" x:Name="listBox" HorizontalAlignment="Left" Height="111" VerticalAlignment="Top" Width="765" Margin="105,47,0,0" BorderBrush="{DynamicResource ControlBorderBrush}" BorderThickness="1" />
<TextBlock Grid.Column="0" x:Name="textBlock2" HorizontalAlignment="Left" Margin="10,191,0,0" TextWrapping="Wrap" Text="Project Location: " VerticalAlignment="Top"/>
<CheckBox Grid.Column="1" x:Name="checkBox" Content="Create from pre-existing files." Margin="105,162,-95,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/>
<controls1:PathTextBox Grid.Column="1" x:Name="textBox1" Height="28" Margin="105,0,11,39" VerticalAlignment="Bottom" Width="765" RenderTransformOrigin="0.075,-0.154" IsDirectory="True" TheDesc="Please choose a directory for the project."/>
<Button x:Name="button1" Content="Create Project" HorizontalAlignment="Left" Margin="10,219,0,0" VerticalAlignment="Top" Width="861" Style="{DynamicResource AccentedSquareButtonStyle}"/>
</Grid>
</TabItem>
<TabItem Header="Load Project"/>
<TabItem Header="Recent"/>
</TabControl>
</Grid>
改为使用 DockPanel。
<DockPanel>
<TextBlock HorizontalAlignment="Left" Margin="10,10,0,0" Text="{Resx Key=TextBlock_ProjectName}"/>
<TextBox x:Name="ProjectNameTextBox" HorizontalAlignment="Right" Margin="10,10,0,0" MinWidth="770" MaxWidth="770"/>
</DockPanel>
就像评论中 Karmacon 所建议的那样,使用 Grid 最简单。 (编辑:也许不是最简单的,但它可能是提供您需要的确切结果的方法)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" MinWidth="770" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="10,10,0,0" Text="{Resx Key=TextBlock_ProjectName}"/>
<TextBox Grid.Column="1" x:Name="ProjectNameTextBox" Margin="10,10,0,0"/>
</Grid>
当然,我根据一些假设做了一些修改,我认为这是很明显的。