ListView скачет или не сжимается
Сначала возникла проблема с развалом экспандера, не возвращающего пространство.
Основываясь на границах, кажется, что ListView не сжимается, а Expander не сжимается.
Следующий код исправил проблему сжатия.
ОтЭлемент управления ListBox не сжимается
Это теряет виртуализацию, но я согласен с этим, так как это столько данных, сколько мне нужно для отображения.
Но тогда возникла новая проблема.
Если вы откроете какие-либо два уровня Expander и попытаетесь нажать на флажок, он будет часто прыгать, а иногда прыгать так сильно, что щелчок пропустит флажок.
Прокрутите весь путь вниз, чтобы флажок не был внизу (под ним есть несколько Расширителей).
Затем нажмите, и он будет прыгать и, скорее всего, даже пропустить элемент.
Я могу предпринять несколько попыток проверить или снять отметку с последнего ряда.
Я уверен, что это происходит из-за того, что клик обрабатывается дважды и что-то происходит между ними.
Так как исправить обе проблемы?
1. Свернуть, сжать / вернуть пространство?
2. Флажок не прыгает?
Пробное обновление с помощью диспетчера, UpdateLayout (), InvalidateVisual () и Height = Double.NaN.
StackPanel не является проблемой, так как я могу удалить его и использовать только Exp1, но проблема остается.
У меня была похожая проблема до двойного щелчка с SelectedItem, которую я смог исправить с помощью второго щелчка, но это исправление здесь не работает.Промах курсора
Пробовал TreeView, но я не отображаю ту же информацию на каждом уровне, поэтому он не работает.
Но я открыт для другого подхода.
Двухуровневая иерархия и просто нужны флажки на втором уровне.
Извините за большое количество кода, но это полная программа для воспроизведения проблемы.
Exp1 идентичен Exp2 и не является действительно необходимым для воспроизведения проблемы, но это отражает реальную программу на случай, если кто-то предложит альтернативное решение.
namespace ListViewJump
{
public partial class MainWindow : Window
{
private List list1 = new List();
private List list2 = new List();
public MainWindow()
{
this.DataContext = this;
for (int i = 1; i < 10; i++)
{
List lr1 = new List();
List lr2 = new List();
for (int j = 1; j < 100; j++)
{
lr1.Add(new ListItemRow("Row Row Row Row Row Row" + j.ToString()));
lr2.Add(new ListItemRow("Rwo Rwo Rwo Rwo Rwo Rwo" + j.ToString()));
}
list1.Add(new ListItem("one " + i.ToString(), lr1));
list2.Add(new ListItem("two " + i.ToString(), lr2));
}
InitializeComponent();
}
public List List1 { get { return list1; } }
public List List2 { get { return list2; } }
}
public class ListItem
{
private string dispName;
private List rows;
public string DispName { get { return dispName; } }
public List Rows { get { return rows; } }
public ListItem(String DispName, List Rows) { dispName = DispName; rows = Rows; }
}
public class ListItemRow
{
private string strValue;
private bool on = false;
public string StrValue { get { return strValue; } }
public bool On
{
get { return on; }
set { on = value; }
}
public ListItemRow(String StrValue) { strValue = StrValue; }
}
}
Я думаю, что здесь есть две ошибки.
Контроль не уменьшается, а клик обрабатывается дважды.
Я получаю сокращение будет добавить накладные расходы, но все же, почему не вариант.