Я пытаюсь создать сетку настроек, где пользователь может применить выбранную настройку к соответствующим спискам заголовков столбцов и столбцов, щелкнув соответствующие кнопки в сетке. Я хочу, чтобы мой элемент управления вел себя так, как ведет себя окно таблицы Excel Excel, когда вы прокручиваете. Ниже анатомию окна я смог придумать:Пользовательский контроль сетки
На рисунке показано, как я разработал окно. В Списке коробка и B представляет элемент и пользователь соответственно и ItemsControl, который представляет собой сетку из кнопок действуют как клетка, которые пользователи нажимают на, чтобы применить настройки, которые они хотят соответствующий и B.
Проблема у меня есть, я должен быть в состоянии сделать две вещи
а) Когда пользователь прокручивает слева направо, или наоборот - Listbox А стационарная кнопка сетки и Listbox B прокрутки в синхронном
б) Когда пользователь прокручивает сверху вниз, или наоборот - Listbox B неподвижна кнопка сетка и Listbox свитка в синхронном
в настоящее время я поставил Listbox а и сетка кнопки в общем просмотре прокрутки и я могу достичь условия б). Но не условие а). Для достижения обоих условий а) и б) мне придется отделить Listbox A и сетку кнопок и связать их свойства прокрутки. Так что я пытался что-то вроде этого
ScrollViewer scrollView = null;
ScrollViewer scrollView2 = null;
void scrollView_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
var newOffset = e.VerticalOffset;
if ((null != scrollView) && (null != scrollView2))
{
scrollView.ScrollToVerticalOffset(newOffset);
scrollView2.ScrollToVerticalOffset(newOffset);
}
}
private ScrollViewer getScrollbar(DependencyObject dep)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dep); i++)
{
var child = VisualTreeHelper.GetChild(dep, i);
if ((null != child) && child is ScrollViewer)
{
return (ScrollViewer)child;
}
else
{
ScrollViewer sub = getScrollbar(child);
if (sub != null)
{
return sub;
}
}
}
return null;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
scrollView = getScrollbar(dataGrid1);
scrollView2 = getScrollbar(dataGrid2);
if (null != scrollView)
{
scrollView.ScrollChanged += new ScrollChangedEventHandler(scrollView_ScrollChanged);
}
if (null != scrollView2)
{
scrollView2.ScrollChanged += new ScrollChangedEventHandler(scrollView_ScrollChanged);
}
}
Я изменил код, чтобы удовлетворить свои потребности, конечно, но когда я развязаны Listbox и кнопку сетки они не были приведены в соответствие друг с другом больше, и когда-либо я прокручивается кнопку сетка (или просмотр прокрутки) в списках A и B не будут синхронизироваться, они прокручивают величины быстрее, чем просмотр прокрутки.
В заключение необходимо создать элемент управления, где пользователи могут назначить выбранные параметры для элементов в списках и B, выбрав соответствующую кнопку на панели кнопок сетки. Листы с списком A и B должны быть полностью выровнены с соответствующей кнопкой настроек в сетке кнопок. И я хотел бы позволить пользователям выполнять прокрутки действий а) и б), как объяснялось выше. Мне нужна помощь/советы по этой проблеме.
PS: код синхронизации прокрутки от этого stackoverflow question и идея кнопки сетки от here
Спасибо Bizz, попробуем это – NANDAGOPAL