更改ListBox ItemsPanelTemplate让我陷入困境?

时间:2011-09-22 09:43:41

标签: c# wpf custom-controls

我有一个CustomControl(说CC),它是从ContentControl继承而来的,其中包含ScrollViewer,其中包含ContentPresenter。当我将ListBox放入CC时,它的工作没有任何问题。但是,当我设置ItemsPanelTemplate的{​​{1}}时,它不会通知ListBox滚动到CC所选项目。

它是什么原因? -Thanks


更新

只有当我将ListBoxHorizontalScrollBarVisibility设置为VerticalScrollBarVisibility并同时自定义Hidden ItemsPanelTemplate时,我才会遇到上述问题。 (我需要隐藏scollbars。)

我想知道隐藏ListBox是否阻止Scrollbars内容通知它将所选项目置于视图中,为什么当我不更改项目面板时不会发生此问题???


Generic.xaml:

ScrollViewer

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

2 个答案:

答案 0 :(得分:0)

您是否已将ItemsPanelTemplate中Panel的IsItemsHost属性设置为True?

E.g。如果itemspaneltemplate应使用Canvas:

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

Related

答案 1 :(得分:0)

StackPanel将其内容视为拥有无限空间。 您必须明确地限制其大小,或将其更改为其他面板,例如Grid。

试试这个:

<ItemsPanelTemplate>
      <Grid/>  
  </ItemsPanelTemplate>

或者:

  <ItemsPanelTemplate>
       <StackPanel Orientation="Horizontal" Width="100" Height="100"/>
  </ItemsPanelTemplate>