Изменение ListBox ItemsPanelTemplate доставило мне неприятности? - PullRequest
1 голос
/ 22 сентября 2011

У меня есть CustomControl (скажем, CC), который был унаследован от ContentControl и содержит ScrollViewer, который включает ContentPresenter.Когда я ставлю ListBox в CC, он работает без проблем.Но когда я устанавливаю ItemsPanelTemplate из ListBox, он не уведомляет CC о прокрутке до ListBox выбранного элемента.

В чем причина?-Спасибо


ОБНОВЛЕНИЕ:

Я столкнусь с проблемой, описанной выше, только если я установлю HorizontalScrollBarVisibility или VerticalScrollBarVisibility на Hidden и настроюItemsPanelTemplate из ListBox одновременно.(Мне нужно скрыть полосы прокрутки.)

Интересно, если скрытие Scrollbars не позволяет ScrollViewer содержимому уведомлять об этом для отображения выбранного элемента, почему эта проблема не возникает, когда я не меняю элементыпанель ???


Generic.xaml:

<ResourceDictionary ...>
    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <Border ...>
                        <ScrollViewer ...
                            CanContentScroll="True"
                            HorizontalScrollBarVisibility="Hidden"   « PROBLEM
                            VerticalScrollBarVisibility="Hidden">    « 

                            <ContentPresenter Content="{TemplateBinding Content}"/>

                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

MainWindow.xaml:

<Window x:Class="MyNamespace1.MainWindow"
        ...
        xmlns:proj="clr-namespace:MyNamespace0;assembly=...">
    <Grid>
        <proj:CustomControl1 x:Name="CC">
            <ListBox>
                <ListBox.ItemsPanel>                              «
                    <ItemsPanelTemplate>                          «
                        <StackPanel Orientation="Horizontal"/>    « PROBLEM
                    </ItemsPanelTemplate>                         «
                </ListBox.ItemsPanel>                             «

                <!--content goes here-->

            </ListBox>
        </proj:CustomControl1>
    </Grid>
</Window>

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

StackPanel обрабатывает содержимое, имеющее бесконечное пространство. Вам придется явно ограничить его размер или изменить его на другую панель, например Grid.

Попробуйте это:

<ItemsPanelTemplate>
      <Grid/>  
  </ItemsPanelTemplate>

Или:

  <ItemsPanelTemplate>
       <StackPanel Orientation="Horizontal" Width="100" Height="100"/>
  </ItemsPanelTemplate>
0 голосов
/ 22 сентября 2011

Вы установили свойство IsItemsHost для Panel в ItemsPanelTemplate на True?

Например, если шаблон элементов должен использовать Canvas:

<ItemsPanelTemplate>
   <Canvas IsItemsHost="True" /> 
</ItemsPanelTemplate>

Связано

...