【问题标题】:How to set TexTbox to resize automatically depending on TextBlock. WPF如何将 TextTbox 设置为根据 TextBlock 自动调整大小。 WPF
【发布时间】:2016-10-15 14:44:14
【问题描述】:

我想制作一个类似于 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>

【问题讨论】:

  • 听起来你想要的是一个有 2 列的网格

标签: .net wpf xaml textbox textblock


【解决方案1】:

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

【讨论】:

  • 您缺少将 TextBlock 停靠在左侧的 DockPanel.Dock。此外,根据父面板,您可能需要在 DockPanel 本身上设置 Width :)
  • 这也有效,谢谢.. 但我更喜欢使用网格。
【解决方案2】:

就像Karmacon 在 cmets 中建议的那样,使用 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>

当然,我根据一些假设做了一些改变,我相信这是很明显的。

【讨论】:

  • 它只是不起作用..如果有问题请检查我的代码。将其添加到主帖。就像第二列在最右边一样。
  • @Ahmad45123 大声笑...我没有考虑过边距会如何影响布局,我认为这是您自己的设计要求:D
  • 不,你的边距没有错,这些是正确的。其他控件上的边距错误,而且我将宽度设置为固定数字,这也不起作用。必须确保使用边距调整大小。
猜你喜欢
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2020-12-27
  • 2015-07-16
  • 2014-05-04
相关资源
最近更新 更多