2011-07-29 40 views
2

對不起我的英語。WPF:根據ScrollBar是否可見,更改ListBox ItemTemplate


我需要更改項目的DataTemplate中視垂直滾動條是否可見或不可見(或啓用或禁用)列表框。 我使用ListBox和ScrollBar的樣式。 當屬性「IsEnabled」的值爲「False」時,我可以更改scrollBar模板。但我無法理解如何捕捉列表框樣式中的ScrollBar.VisibilityChanging。我tryed使用

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

...與...

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

這是不行的。

我希望您能幫我

回答

2

的ScrollViewer中有兩個屬性:ComputedHorizo​​ntalScrollBarVisibility和ComputedVerticalScrollBarVisibility這是隻讀的依賴屬性,我們可以觸發我們的ListBox的控件模板(這裏我只考慮使用它們垂直屬性)

<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> 

注意:爲了清楚說明答案,這是一個精簡的ListBox的簡單模板。我刪除了應該圍繞ScrollViewer和ScrollViewer上定義的所有屬性的邊框。

+0

謝謝!我不知道屬性「ComputedVerticalScrollBarVisibility」必須像這樣使用。現在我的列表框就像我想要的那樣工作。 – Kirahvi

相關問題