2012-07-12 26 views
2

此問題與another SO question of mine非常相關,但這一個更具體。請隨時前往其他問題了解更多詳情,但我應該在此提供您需要的一切。如果使用綁定/轉換器,ComputedVerticalScrollBarVisibility觸發器不起作用

我實現了一個自定義樣式,以我的列表視圖,這樣我可以訪問使用以下(我刪除了一些心不是相關的雜項的)

<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ScrollViewer"> 
       <Grid Background="{TemplateBinding Background}"> 
        <DockPanel Margin="{TemplateBinding Padding}"> 
         <ScrollViewer DockPanel.Dock="Top" Focusable="false"> 
        </DockPanel> 
        <ScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Value="{TemplateBinding HorizontalOffset}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
        <ScrollBar Name="PART_VerticalScrollBar" Grid.Column="1" Margin="20,0" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Value="{TemplateBinding VerticalOffset}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="ComputedVerticalScrollBarVisibility" Value="Collapsed"> 
         <Setter Property="Width"> 
          <Setter.Value> 
           <Binding 
            ConverterParameter="400" 
            RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type ListView}}" 
          > 
            <Binding.Converter> 
             <Converters:ListViewColumnResizeConverter/> 
            </Binding.Converter> 
           </Binding> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="ComputedVerticalScrollBarVisibility" Value="Visible"> 
         <Setter Property="Width"> 
          <Setter.Value> 
           <Binding 
            ConverterParameter="500" 
            RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type ListView}}" 
          > 
            <Binding.Converter> 
             <Converters:ListViewColumnResizeConverter/> 
            </Binding.Converter> 
           </Binding> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

注意兩個觸發器滾動性質,我有一個用於Visible,另一個用於Collapsed。當我運行我的應用程序時,無論如何,我都會得到一個Visible,然後是Collapsed。我甚至延遲用定時器加載我的數據,並且沒有觸發Visible有什麼我缺少,或者這是一個錯誤,Dependency Property不正確觸發?

UPDATE

所以,我注意到,這個準系統版本是工作(沒有使用綁定和轉換器),所以我刪除了從我的代碼,並取得了觸發器簡單地更新背景顏色。而且,它的工作原理,爲什麼添加一個綁定/轉換器搞亂了觸發器?

回答

1

那麼,答案絕對不會幫助我,但似乎來自綁定的值被緩存。由於我的代碼隱藏轉換器更多的是獲取代碼訪問計算觸發器的黑客,我甚至沒有使用返回值。但是,我繼續並將獨特的顏色值綁定到每個觸發器,並且只要滾動條變得可見,我的代碼就不會再被觸發,但是使用了初始調用的返回值。我必須承認,這對MS隊伍來說非常聰明,但對我來說卻是一個絆腳石。如果用戶具有可用於每個觸發器的時間相關值,該怎麼辦?