2015-11-03 2 views
1

У меня есть ListBox с HorizontalAlignment = "Left", поэтому ширина списка зависит от его содержимого. В каждом элементе списка есть текстовое поле. Когда я печатаю текстовое поле, увеличивается ширина списка. Я хочу, чтобы ширина TextBox зависела от ширины элемента ListBox, но не наоборот, а текст в TextBox обернут.Ввод текста в TextBox приводит к увеличению ширины ListBox

<Window x:Class="WpfOverflow.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="1000"> 
<ListBox Background="CadetBlue" HorizontalAlignment="Left" MaxWidth="500"> 
    <ListBox.Items> 
    <ListBoxItem> 
     <DockPanel> 
     <TextBlock Text="Some text of the element" DockPanel.Dock="Top"/> 
     <TextBox Text="Enter text here" TextWrapping="WrapWithOverflow"/> 
     </DockPanel> 
    </ListBoxItem> 
    </ListBox.Items> 
</ListBox> 

Initial width of the list box ListBox width grows on typing

UPDATE: не принял ответ, но ответ на @bathineni помогли в этом случае Prevent a TextBox from horizontal expanding in WPF

<ListBox Background="CadetBlue" HorizontalAlignment="Left" MaxWidth="500" HorizontalContentAlignment="Stretch"> 
    <ListBox.Items> 
    <ListBoxItem> 
     <DockPanel> 
     <TextBlock Text="==== Some text of the element =====" DockPanel.Dock="Top"/> 
     <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" Name="scv" > 
      <TextBox Text="Enter text here" Style="{StaticResource textBoxMultiline}" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" /> 
     </ScrollViewer> 
     </DockPanel> 
    </ListBoxItem> 
    </ListBox.Items> 
</ListBox> 
+0

Разве это не тот случай, просто определяя 'Width' на вашем' ListBoxItem'? –

+0

Я не хочу фиксировать ширину, ширина зависит от элементов в верхней части элемента списка, представленного «Некоторым текстом элемента», эта ширина детали зависит от пользовательских данных. –

ответ

0
<ListBox Background="CadetBlue" HorizontalAlignment="Left" MaxWidth="500" Width="200" > 
     <ListBox.Items> 
      <ListBoxItem> 
       <DockPanel> 
        <TextBlock Text="Some text of the element" DockPanel.Dock="Top"/> 
        <TextBox Text="Enter text here" TextWrapping="NoWrap" Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth}" /> 
       </DockPanel> 
      </ListBoxItem> 
     </ListBox.Items> 
    </ListBox> 
+0

Это решение без текстовой упаковки также хорошо работает –

0

Если вы ш муравей для достижения этой цели:

example wpf image

Проще говоря MaxWidth на вашем ListBoxItem.

<ListBox Background="CadetBlue" HorizontalAlignment="Left"> 
     <ListBox.Items> 
      <ListBoxItem MaxWidth="150"> 
       <DockPanel> 
        <TextBlock Text="Some text of the element" DockPanel.Dock="Top"/> 
        <TextBox Text="Enter text here" TextWrapping="WrapWithOverflow"/> 
       </DockPanel> 
      </ListBoxItem> 
     </ListBox.Items> 
    </ListBox> 
+0

Я не хочу фиксировать ширину, ширина зависит от элементов в верхней части элемента списка, представленного «Некоторым текстом элемента», эта ширина детали зависит от пользовательских данных. Если пользовательские данные меньше 150 пунктов, тогда он вырастет до 150 пунктов. –

Смежные вопросы