2011-10-02 31 views
0

虛擬化的TreeView作品的時候,我只風格的樹型視圖與該位XAML的風格:風格的TreeView,但保持虛擬

<Style.Triggers> 
    <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true"> 
     <Setter Property="ItemsPanel"> 
      <Setter.Value> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel/> 
       </ItemsPanelTemplate> 
      </Setter.Value> 
     </Setter> 
    </Trigger> 
</Style.Triggers> 

不過,如果我嘗試給的TreeView本身風格相似的風格= {}資源的休息的虛擬化,即:

<Style x:Key="FontTreeViewStyle" TargetType="{x:Type TreeView}"> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="TreeView"> 
       <Border Name="Border" CornerRadius="1" BorderThickness="1" BorderBrush="{DynamicResource BorderMediumColor}" Background="{DynamicResource ControlLightColor}"> 
        <ScrollViewer Focusable="False" CanContentScroll="False" Padding="4"><!-- Style="{StaticResource MyScrollViewer}"--> 
         <ItemsPresenter /> 
        </ScrollViewer> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

在此先感謝!

+0

固定。我複製了Expression Blend中生成的樣式,並且意識到我沒有完全實現VirtualizingStackPanel.IsVirtualizing –

回答

2

通過指定CanContentScroll =「假」的ScrollViewer中,你將永遠停止虛擬

看看why setting ScrollViewer.CanContentScroll to false disable virtualization

如果您仍然有雙重檢查在一些創建像史努比或可視化樹問題WPF檢查員。爲了實現虛擬化,IScrollInfo對象(即面板)必須是ScrollViewer的直接子對象。

http://msdn.microsoft.com/en-us/library/ms750665.aspx

希望幫助, 馬克

+0

感謝您的簡潔答案,請在下班後檢查它:) –

+0

它有幫助嗎?我有同樣的問題:當我爲我的TreeView指定一個樣式時,虛擬化會中斷。 – Shakaron