Custom-Control中ItemsPresenter的项目未正确显示

时间:2015-04-16 12:16:36

标签: c# wpf xaml custom-controls scrollviewer

我已经编写了一个自定义控件,该控件应该在列表中显示项目,并提供与滚动事件相关的其他命令,例如加载更多。所以我决定创建ScrollViewer并在ItemsPresenter内添加generic.xaml

基本上,当我使用ItemsControl作为基类时,这可以正常工作。但现在我需要点击一个项目的可能性。解决方案是使用ListView类作为基类。

这就是问题所在。只要我使用GridViewListView作为基类,列表的内容仅在列表的初始偏移量处显示时显示。您只能通过向下滚动查看的其他/新项目不会显示。

enter image description here

我认为列表可能不会调整大小,但在列表周围添加页脚和边框会显示列表正确调整大小。

我使用的集合是ObservableCollection,可与ItemsControl基类一起使用。

我认为问题是xaml方面的设置或其他问题。但我不知道在哪里,我不知道接下来要搜索什么。每次我搜索,所有结果都标记为clicked =(

以下是generic.xaml

的xaml代码
<Style TargetType="lists:ListViewWithCommands">
    <Setter Property="Template">
        <Setter.Value>                
            <ControlTemplate TargetType="lists:ListViewWithCommands">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="Red"
                    BorderThickness="1">
                    <ScrollViewer x:Name="ItemScrollViewer">
                        <Border BorderBrush="White" BorderThickness="2">
                            <StackPanel>
                                <ItemsPresenter />
                                <ContentPresenter Visibility="{TemplateBinding LoadingTemplateVisibility}" ContentTemplate="{TemplateBinding LoadingTemplate}" />
                            </StackPanel>
                        </Border>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

以下是我的控件的一部分:

[TemplatePart(Name="ItemScrollViewer", Type=typeof(ScrollViewer))]
  public sealed class ListViewWithCommands : ListView
  {
      private ScrollViewer _itemScrollViewer;

      public ListViewWithCommands()
      {
          this.DefaultStyleKey = typeof(ListViewWithCommands);
      }

      protected override void OnApplyTemplate()
      {
          base.OnApplyTemplate();
          this._itemScrollViewer = GetTemplateChild("ItemScrollViewer") as ScrollViewer;
          if (this._itemScrollViewer != null)
          {
              Debug.WriteLine(String.Format("ItemScrollViewer found! Attatching Event Handler!"), this.GetType().Name);
              this._itemScrollViewer.ViewChanged += _itemScrollViewer_ViewChanged;
          }
          else
          {
              throw new NullReferenceException("ItemScrollViewer not found!");
          }
      }
....

我希望你有任何建议。

罗伯特

0 个答案:

没有答案