我已经编写了一个自定义控件,该控件应该在列表中显示项目,并提供与滚动事件相关的其他命令,例如加载更多。所以我决定创建ScrollViewer
并在ItemsPresenter
内添加generic.xaml
。
基本上,当我使用ItemsControl
作为基类时,这可以正常工作。但现在我需要点击一个项目的可能性。解决方案是使用ListView
类作为基类。
这就是问题所在。只要我使用GridView
或ListView
作为基类,列表的内容仅在列表的初始偏移量处显示时显示。您只能通过向下滚动查看的其他/新项目不会显示。
我认为列表可能不会调整大小,但在列表周围添加页脚和边框会显示列表正确调整大小。
我使用的集合是ObservableCollection
,可与ItemsControl
基类一起使用。
我认为问题是xaml方面的设置或其他问题。但我不知道在哪里,我不知道接下来要搜索什么。每次我搜索,所有结果都标记为clicked =(
以下是generic.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!");
}
}
....
我希望你有任何建议。
罗伯特