2016-06-14 1 views
1

Je suis un peu nouveau à WPF et j'ai besoin d'une petite aide. Je veux faire quelque chose comme un TextBlock et a un TextBox en face de celui-ci. Cependant, mon application est localisable, de sorte que le TextBlock peut parfois contenir du texte long et parfois du texte court. Je souhaite donc que la zone de texte se redimensionne automatiquement en fonction de la largeur de TextBlock.Comment configurer TexTbox pour redimensionner automatiquement en fonction de TextBlock. WPF

J'ai essayé de le faire avec un StackPanel mais a échoué 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> 

Chaque fois que le textblock obtient un plus grand texte, la zone de texte MOVES fait à droite et non redimensionnées ..

J'ai juste besoin Pour être poussé dans le bon sens, toute aide est appréciée.

E: Mon code actuel à l'aide Grids:

<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

Il semble que ce que vous voulez est une grille avec 2 colonnes – Karmacon

Répondre

2

Comme quoi Karmacon suggéré dans les commentaires, il est plus facile de le faire avec la grille. (Edit: peut-être pas facile, mais il est probablement celui qui donne le résultat exact dont vous avez besoin)

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

Bien sûr, je fait quelques changements fondés sur certaines hypothèses, que je crois est assez évident.

+0

cela ne fonctionne tout simplement pas .. S'il vous plaît vérifier mon code s'il y a quelque chose de mal. Ajouté à la publication principale. c'est comme si la deuxième colonne est comme à droite. – Ahmad45123

+0

@ Ahmad45123 lol ... Je ne pensais pas à la façon dont la marge affecterait la mise en page, je suppose que c'est votre propre exigence de conception: D – Jai

+0

Non, vos marges ne sont pas fausses, celles-ci sont correctes. les autres contrôles et aussi j'avais la largeur définie à un nombre fixe qui ne fonctionnait pas non plus .. Devait s'assurer de la taille comme en utilisant les marges. – Ahmad45123

1

Utilisez un DockPanel à la place.

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

Il vous manque le 'DockPanel.Dock' pour ancrer le TextBlock sur le côté gauche. En outre, selon le panneau parent, vous devrez peut-être définir une largeur sur le DockPanel lui-même :) – Rachel

+0

Cela a également fonctionné, merci .. Mais je préfère utiliser la grille. – Ahmad45123