2014-11-20 2 views
0

사용자가 눈금에서 해당 단추를 클릭하여 해당 행 및 열 머리글 목록 상자에 선택한 설정을 적용 할 수있는 설정 표를 만들려고합니다. 내 컨트롤이 스크롤 할 때 ms 엑셀 스프레드 시트 창이 어떻게 동작하는지와 같은 동작을 원합니다.사용자 지정 표 컨트롤

enter image description here

이미지는 내가 창을 설계 한 방법을 보여줍니다 다음은 내가 가지고 올 수 있었던 윈도우의 해부학입니다. 목록 상자 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

답변

0

에서입니다 :

<StackPanel Grid.IsSharedSizeScope="True"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="col1"/> 
       <ColumnDefinition SharedSizeGroup="col2"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="some text"/> 
      <TextBlock Text="some other text" Grid.Column="1"/> 
     </Grid> 

     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="col1"/> 
       <ColumnDefinition SharedSizeGroup="col2"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="text"/> 
      <TextBlock Text="a very very long text" Grid.Column="1"/> 
     </Grid> 
    </StackPanel> 
+0

감사합니다 Bizz, 시도해 보겠습니다. – NANDAGOPAL