사용자가 눈금에서 해당 단추를 클릭하여 해당 행 및 열 머리글 목록 상자에 선택한 설정을 적용 할 수있는 설정 표를 만들려고합니다. 내 컨트롤이 스크롤 할 때 ms 엑셀 스프레드 시트 창이 어떻게 동작하는지와 같은 동작을 원합니다.사용자 지정 표 컨트롤
이미지는 내가 창을 설계 한 방법을 보여줍니다 다음은 내가 가지고 올 수 있었던 윈도우의 해부학입니다. 목록 상자 및 B는 각각 항목과 사용자를 대표하고 버튼의 격자 인 ItemsControl에는 사용자가 해당 및 B에 원하는 설정을 적용 클릭 세포 역할을합니다.
내가 가진 문제는 두 가지
을 할 수 있어야한다A) 사용자가 스크롤 오른쪽 또는 그 구절을 떠날 때 - 목록 상자 A는 정지 동기
의 버튼 그리드 및 목록 상자 B 스크롤b) 바닥 또는 그 구절 상위 사용자가 스크롤 - 목록 상자 B가 정지 버튼 그리드 목록 상자 I는리스트 박스 풋 한 현재로서는 동기
에 스크롤 공통 스크롤 뷰어 버튼 그리드 나는 조건 b)를 성취 할 수있다. 그러나 조건 a). a)와 b) 두 조건을 모두 달성하려면 Listbox A와 버튼 격자를 분리하고 Scroll 속성을 연결해야합니다. 그래서 나는 물론 내 요구에 맞게 코드를 수정이
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);
}
}
같은 시도하지만 난 목록 상자 하고 버튼 그리드를 분리 할 때 내가 버튼을 스크롤 이제까지는 더 이상 서로 정렬하면되지 않았다 그리드 (또는 스크롤 뷰어) 목록 상자 및 은 스크롤되지 않으며 스크롤 뷰어보다 빠르게 스크롤됩니다. 결론적으로
나는 사용자가 목록 상자 버튼 그리드에서 해당 버튼을 선택하여 및 B의 항목에 설정을 선택 할당 할 수있는 컨트롤을 만들어야합니다. 목록 상자 및 은 버튼 그리드의 해당 설정 버튼과 완벽하게 정렬되어야합니다. 그리고 나는 사용자가 위에서 설명한 것처럼 a)와 b) 스크롤 동작을 수행하게하고 싶습니다. 이 문제와 관련하여 도움/조언이 필요합니다.
추신 : 스크롤 동기 코드는 stackoverflow question에서하고 버튼 그리드 아이디어는 내가 충분히 질문을 이해하지 확신하지만 당신은이 방법을 사용하여 코드를 수정할 수 있습니다 here
감사합니다 Bizz, 시도해 보겠습니다. – NANDAGOPAL