2012-12-21 6 views
2

DataGridExpander이 있지만, 두 항목 만 표시하고 확장을 클릭하면 나머지 항목이 표시됩니다.wpf DataGrid 확장 프로그램 표시 x 항목

어떻게 할 수 있습니까? 당신의 확장 헤더에

<DataGrid.GroupStyle> 
    <GroupStyle AlternationCount="7" > 
     <GroupStyle.ContainerStyle> 
      <Style TargetType="{x:Type GroupItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type GroupItem}"> 
          <Expander IsExpanded="False" Background="{Binding XPath=recipient_color}">            
           <Expander.Header> 
            <Label Content="{Binding}"> 
            </Label>             
           </Expander.Header> 
           <Expander.Content> 
            <ItemsPresenter/> 
           </Expander.Content> 
          </Expander> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
</DataGrid.GroupStyle> 

답변

0

xaml을 사용하여 더 많은 작업을 수행해야하는 또 다른 방법은 확장기 제어 템플릿을 수정하는 것입니다. MSDN의 제어 템플릿에서 ContentRow이라는 모눈 행을 볼 수 있습니다. 해당 행의 높이는 0에서 시작하고 IsExpanded 속성의 트리거는 원하는 높이로 확장합니다. 기본값 ContentRow을 50과 같은 높이 (또는 원하는 항목 수를 표시하는 데 필요한 높이)로 설정하면 확장기가 접힐 때 그룹 항목의 상단 부분이 표시됩니다.

ControlTemplates를 수정하는 방법에 대한 자세한 내용은 here을 참조하십시오.

+0

구현 방법을 예제로 제공 할 수 있습니까? – keno

+0

@keno 기본적으로 당신이해야 할 일은 내가 준 링크 (하단의 리소스 포함)에서 모든 xaml을 복사하고 DataGrid.Resources에 덤프하면됩니다. 그런 다음 ContentRow의 높이를 0에서 다른 높이로 변경하십시오. 문제는 현재 테마와 일치하지 않는 템플릿이며 정확한 시작 템플릿을 찾기가 어려울 수 있다는 것입니다. 그러나 그것의 가치가있는 시도. – Jelly

+0

Hahahahaha IT !!!!! : D 실제로는 원래와 동일한 템플릿이 아닙니다 (머리글의 뒷 색은 파란색/자주색 등입니다). 하지만 그 mannualy 변경됩니다;) 감사합니다! – keno

0
  1. , 목록의 2 개 첫 번째 항목을 표시 할 수있는 선택의 컨트롤을 추가합니다.
  2. 바인드 확장기의 "으로 IsExpanded"하게 proprty에 위의 컨트롤의 가시성, 확장기가 확장 될 때 컨트롤이 숨겨져 있도록 (사용 IValueConverter)
  3. 가 모든 항목을 표시하도록 확장의 컨텐츠를 구축 .

이렇게하면 확장자가 확장되지 않으면 헤더에 2 개의 항목이 표시됩니다 (원하는대로 스타일 지정). 사용자가 펼치면 2 개의 항목이 사라지고 확장기가 확장되며 전체 목록이 다시 표시됩니다.

행운을 빈다.

+0

감사합니다. 그레이트 아이디어;)하지만 howto 내 XML 데이터에서 첫 번째 항목을 선택 ... 나는 내 헤더에 stackpanel에 를 설정할 수 있지만 모든 항목을 보여줍니다 ... 그리고 수동으로 높이를 변경하는 것은 해결책이 아닙니다 헤더에있는 데이터가 어쨌든 잘로드되지 않기 때문에 :-) – keno

+0

코드가 어떻게 설정되어 있는지 알 수는 없지만 코드 숨김으로 관리하는 2 가지 항목의 컬렉션에 다른 바인딩을 만들 수 있습니다. 아마도 IValueConverter를 통해 가능할 수도 있습니다 (콜렉션을 입력으로 취하고, 존재하는 경우 처음 두 항목 만 출력합니다). 하지만 어쨌든 해결책을 찾은 것을 기쁘게 생각합니다 :) – Joe