2011-07-29 2 views
2

영어로 유감입니다.WPF : ScrollBar가 표시되는지 여부에 따라 ListBox ItemTemplate 변경


나는 수직 스크롤 표시 여부 (또는 활성화 또는 비활성화)인지에 따라 목록 상자에서 항목에 대한 DataTemplate을 변경해야합니다. ListBox 및 ScrollBar에 스타일을 사용합니다. 속성 "IsEnabled"의 값이 "False"인 경우 scrollBar 템플릿을 변경할 수 있습니다. 그러나 ListBox 스타일 내에서 ScrollBar.VisibilityChanging을 잡는 방법을 이해할 수 없습니다. 나는 그것은 작동하지 않습니다 ...

<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}"> 
    .......... 
    <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Visibility" Value="Hidden" /> 
    </Trigger> 
...... 

로 ...

<Style TargetType="{x:Type ListBox}" > 
..... 
<Style.Triggers> 
    <Trigger Property="ScrollViewer.ComputedVerticalScrollBarVisibility" 
      Value="Hidden"> 
     <Setter Property="ItemTemplate"> 
      ...... 

를 사용하는 tryed. 나는 희망

당신은 도움이 저

답변

2

의 ScrollViewer는 두 가지 속성이 있습니다 읽기 전용 ComputedHorizontalScrollBarVisibility 및 ComputedVerticalScrollBarVisibility 종속성 속성을 우리는 여기에 내가 단지를 고려하고리스트 박스의 ControlTemplate이 (에 트리거에서 사용할 수 수직 속성)

<Style x:Key="StyleListBoxChangingItemTemplate" TargetType="{x:Type ListBox}"> 
    <Setter Property="ItemTemplate" Value="{StaticResource SomeItemTemplate}"/> 
    <Setter Property="Template"> 
     <ControlTemplate TargetType="{x:Type ListBox}"> 
      <ScrollViewer x:Name="ListScroller"> 
       <ItemsPresenter /> 
      </ScrollViewer> 
      <ControlTemplate.Triggers> 
       <Trigger SourceName="ListScroller" Property="ComputedVerticalScrollBarVisibility" Value="Visible"> 
        <Setter Property="ItemTemplate" Value="{StaticResource SomeOtherItemTemplate}"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter> 
</Style> 

참고 : 응답의 명확성을 위해,이 목록 상자의 제거 다운, 베어 본 템플릿입니다. ScrollViewer 및 ScrollViewer에 정의 된 모든 속성을 둘러 쌀 테두리를 제거했습니다.

+0

고맙습니다! 나는 "ComputedVerticalScrollBarVisibility"속성이 이와 같이 사용되어야한다는 것을 몰랐습니다. 이제 내 목록 상자는 내가 원하는 것처럼 작동합니다. – Kirahvi

관련 문제