2013-02-18 6 views
0

У меня есть список (с нормальной вертикальной ориентацией), каждый элемент которого представляет собой список с горизонтальный ориентация. Я хочу иметь ScrollBar внутри внутренний listbox. Итак, моя проблема заключается в том, как установить ширину внутреннего списка в соответствии с реальной текущей шириной внешнего.Прокрутка списка в другом списке

Мой текущий код:

<Window.Resources> 
    <HierarchicalDataTemplate x:Key="ItemTemplateSchedule"> 
     <ListBox> 
      <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal" /> 
        </ItemsPanelTemplate> 
      </ListBox.ItemsPanel> 
      <ListBoxItem>My-Very-Long-Item-Nimber-1___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-2___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-3___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-4___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-5___</ListBoxItem> 
     </ListBox> 
    </HierarchicalDataTemplate> 
</Window.Resources> 

<Grid> 
    <ListBox ItemTemplate="{StaticResource ItemTemplateSchedule}" > 
     > 
    </ListBox> 
</Grid> 

Текущий скриншот: Listbox inside listbox .

UPD1

Хорошо, ответ на мой вопрос настройки ширины для внутреннего ListBox, благодаря @ sa_ddam213:

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=ActualWidth}" 

Теперь я хочу добавить новый элемент управления в каждой строке внешний список:

<HierarchicalDataTemplate x:Key="ItemTemplateSchedule"> 
    <StackPanel Orientation="Horizontal" Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=ActualWidth}"> 
     <TextBlock Text="This is Text in a TextBlock"/> 
     <ListBox > 
      <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ListBox.ItemsPanel> 
      <ListBoxItem>My-Very-Long-Item-Number-1___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Number-2___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Number-3___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Number-4___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Number-5___</ListBoxItem> 
     </ListBox> 
    </StackPanel> 
</HierarchicalDataTemplate> 

И он не работает сейчас! Можно ли решить эту проблему? Текущий кадр: upd1

ответ

1

Вы можете использовать FindAncestor привязку к родителю ListBoxActualWidth

Пример:

<Window.Resources> 
    <HierarchicalDataTemplate x:Key="ItemTemplateSchedule"> 
     <ListBox Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=ActualWidth}" > 
      <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ListBox.ItemsPanel> 
      <ListBoxItem>My-Very-Long-Item-Nimber-1___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-2___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-3___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-4___</ListBoxItem> 
      <ListBoxItem>My-Very-Long-Item-Nimber-5___</ListBoxItem> 
     </ListBox> 
    </HierarchicalDataTemplate> 
</Window.Resources> 

Результат:

enter image description here

+0

Спасибо! Он работает нормально. Но если я хочу вставить какой-то новый элемент управления в каждую строку внешнего макета, это не сработает. См. UPD1 в моем сообщении. –

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