2016-06-14 18 views
1

Ich bin etwas neu zu WPF und ich brauche kleine Hilfe.Wie setze ich TexTbox, um die Größe abhängig von TextBlock automatisch zu ändern. WPF

Ich möchte etwas wie ein TextBlock machen und hat eine TextBox davor. Meine App ist jedoch lokalisierbar, so dass der Textblock manchmal langen Text und manchmal auch kurze Texte enthalten kann. Daher möchte ich, dass sich das Textfeld automatisch an die Breite des TextBlocks anpasst.

Ich versuchte es mit einem Stackpanel zu tun, aber nicht 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> 

Immer, wenn der Textblock einen größeren Text bekommt, die Textbox MOVES tatsächlich auf der rechten Seite und die Größe nicht geändert ..

Ich brauche nur um auf den richtigen Weg gebracht zu werden, wird jede Hilfe geschätzt.

E: Mein aktueller Code Grids mit:

<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

Es klingt wie, was Sie wollen, ist ein Raster mit 2 Spalten – Karmacon

Antwort

2

Wie, was Karmacon in den Kommentaren vorgeschlagen, ist es am einfachsten mit Grid zu tun. (Edit: vielleicht nicht am einfachsten, aber es ist wahrscheinlich derjenige, der das exakte Ergebnis, die Sie brauchen)

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

Natürlich habe ich einige Änderungen basierend auf einigen Annahmen, die ich glaube, ist ziemlich offensichtlich.

+0

es funktioniert einfach nicht .. Bitte überprüfen Sie meinen Code, wenn etwas nicht stimmt. Hinzugefügt zum Hauptbeitrag. ist es so, dass die zweite Spalte ganz rechts ist. – Ahmad45123

+0

@ Ahmad45123 lol ... Ich habe nicht viel darüber nachgedacht, wie der Rand das Layout beeinflussen würde, ich nahm an, dass es deine eigene Design-Anforderung ist: D – Jai

+0

Nein, deine Ränder sind nicht falsch, das sind richtig .. Ränder wo falsch die anderen Steuerelemente und auch ich hatte die Breite auf eine feste Zahl, die auch nicht funktioniert .. musste sicherstellen, dass es als die Verwendung der Ränder. – Ahmad45123

1

ein DockPanel stattdessen verwenden.

<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

Sie vermissen die 'DockPanel.Dock', um den TextBlock auf der linken Seite anzudocken. Abhängig vom übergeordneten Panel müssen Sie möglicherweise auch eine Breite auf dem DockPanel setzen :) – Rachel

+0

Das hat auch funktioniert, danke .. Aber ich bevorzuge das Grid. – Ahmad45123