코드입니다.
아이들을 반복하면서 ArrangeOverride 메서드에서 다음을 수행합니다.
var listViewItem = child as ListViewItem;
if (listViewItem != null)
{
listViewItem.Selected -= ListViewItemSelected;
listViewItem.Selected += ListViewItemSelected;
}
은의 MesureOverride에서 나는 우리가 선택한 이벤트에서 탈퇴해야합니다 여기에 CleanUpItems로 전화를 걸.
var listViewItem = children[i] as ListViewItem;
if (listViewItem != null)
{
listViewItem.Selected -= ListViewItemSelected;
}
또한 다음 세 가지 기능을 추가했습니다.
private void ListViewItemSelected(object sender, RoutedEventArgs e)
{
var listViewItem = sender as ListViewItem;
if(listViewItem == null) return;
var content = listViewItem.Content as CollectionViewGroup;
if(content != null) return; //item is a group header dont click
var items = ItemContainerGenerator as ItemContainerGenerator;
if(items == null) return;
BringIndexIntoView(items.IndexFromContainer(listViewItem));
listViewItem.Focus();
}
protected override void BringIndexIntoView(int index)
{
var offset = GetOffsetForFirstVisibleIndex(index);
SetVerticalOffset(offset.Height);
}
private Size GetOffsetForFirstVisibleIndex(int index)
{
int childrenPerRow = CalculateChildrenPerRow(_extent);
var actualYOffset = ((index/childrenPerRow) * ChildDimension.Height) - ((ViewportHeight - ChildDimension.Height)/2);
if (actualYOffset < 0)
{
actualYOffset = 0;
}
Size offset = new Size(_offset.X, actualYOffset);
return offset;
}
GetOffsetForFirstVisibleIndex 기능은 아마 당신의 구현에 따라 달라질 수 있지만 다른 사람이 문제 해결책을 세우는 데 있다면 그것으로 충분 정보이어야한다.
'사용자 정의 패널'에 대한 코드를 볼 수 있습니까? –
@RohitVats Panel 소스에 대한 링크를 추가했습니다. – OriginalMoose
나는 지금 같은 문제가있다. 그것에 관한 어떤 뉴스? – ygoe