2013-06-20 6 views
0

У меня есть список, в который я хочу разместить элементы макета. Я изо всех сил пытаюсь получить стекную панель только в том же объеме, что и родительские объекты. То есть, у меня есть текстовый блок в моем списке, который может содержать много информации, и я хочу, чтобы он обертывал или обрезал (пока не определил, что еще) в зависимости от ширины родителя.StackPanel - Ограничить ширину родительского списка ListBox

Элемент списка - это DataTemplate, однако для целей этого сообщения я скопировал его как listboxitem внутри ListBox.

Все это содержится на странице.

<Grid>   
     <ListBox Name="ListBoxManageMedia" HorizontalContentAlignment="Stretch" Margin="10,52,10,41" ScrollViewer.VerticalScrollBarVisibility="Visible">   
      <ListBoxItem Height="70" Name="ListBoxItem" PreviewMouseDown="ListBoxItem_OnMouseDown">  
       <StackPanel Height="65" Orientation="Horizontal"> 
        <StackPanel Name="VideoImage2" Height="65" Width="102"/>  
         <StackPanel Name="VideoData2" HorizontalAlignment="Stretch" Height="65"> 
          <TextBlock Text="Title" FontWeight="Bold" FontSize="18"></TextBlock> 
          <TextBlock TextTrimming="None" Text="long test text about something or nothing to demonstrate the long description issues I'm having. I want this to wraplong test text about something or nothing to demonstrate the long description issues I'm having. I want this to wrap" TextWrapping="Wrap" FontSize="13" Margin="0,0,0,0"/> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="Cat" FontSize="12" FontStyle="Italic"/> 
           <Border Width="50"></Border> 
           <TextBlock Text="Status" FontSize="12"/> 
          </StackPanel> 
         </StackPanel>     
       </StackPanel> 
      </ListBoxItem>  
     </ListBox>  
    </Grid> 

, как я могу получить текстовый блок (один с очень длинным текстом) только быть столь же широко, как и сам ListBox? (что делает «прикрепление» к краям страницы тонким)

Width of child control should match width of parent container Я уже пробовал этот ответ так, что это безуспешно, и многим другим нравится.

EDIT:

Даже в виде сетки мой длинный текст просто работает на от страницы. Что я здесь делаю неправильно?

<ListBoxItem Height="70" HorizontalContentAlignment="Stretch" Margin="0,0,10,0" Name="ListBoxItem" PreviewMouseDown="ListBoxItem_OnMouseDown"> 
       <Grid Height="65" Margin="0,0,0,0"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="50*"/> 
         <ColumnDefinition Width="330*"/> 
         <ColumnDefinition Width="3*"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="23"></RowDefinition> 
         <RowDefinition Height="23"/> 
         <RowDefinition Height="19"/> 
        </Grid.RowDefinitions> 
        <TextBlock Grid.Column="1" Grid.Row="0" Text="Title" FontWeight="Bold" FontSize="18"></TextBlock> 
        <TextBlock Grid.Column="1" Grid.Row="1" DockPanel.Dock="Top" TextTrimming="CharacterEllipsis" Text="long test text about something or nothing to demonstrate the long description issues I'm having. I want this to wraplong test text about something or nothing to demonstrate the long description issues I'm having. I want this to wrap" TextWrapping="NoWrap" FontSize="13" Margin="0,0,0,0"/> 
        <StackPanel Grid.Column="1" Grid.Row="2" DockPanel.Dock="Top" Orientation="Horizontal"> 
         <TextBlock Text="Cat" FontSize="12" FontStyle="Italic"/> 
         <Border Width="50"></Border> 
         <TextBlock Text="Status" FontSize="12"/> 
        </StackPanel> 
       </Grid> 
      </ListBoxItem> 
+0

Вам действительно нужна 'StackPanel' для компоновки элементов? Будет ли «грид» работать? – ChrisF

+0

как я типа Я сейчас пытаюсь это сделать, без особого успеха – Damo

ответ

0

Хорошо.

Это:

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

и преобразования StackPanels в DockPanels сделал трюк.

0
<TextBlock Grid.Column="1" 
Width="{Binding ActualWidth, ElementName=ListBoxManageMedia}" Grid.Row="1" 
DockPanel.Dock="Top" TextTrimming="CharacterEllipsis" 
Text="long test text about something or nothing to demonstrate the long 
description issues I'm having. I want this to wraplong test text about something 
or nothing to demonstrate the long description issues I'm having. I want this to wrap" 
TextWrapping="NoWrap" FontSize="13" Margin="0,0,0,0"/> 

Если вы хотите, чтобы TextBlock взять ширину своего родителя, вы можете связать ширину, как и выше, но убедитесь, что его родитель говорит Listbox в этом случае его ширина определяется. Аналогично для высоты. Height={Binding ActualHeight, ElementName=ListBoxManageMedia}

+0

Спасибо @Jack Я не сделал ничего о привязке ширины. – Damo

+0

Нет проблем. Рад, что смог помочь. – Jack