2017-02-22 7 views
2

Popup内のTreeViewで動作する仮想化を取得できませんが、同じTreeViewPopupの外部で完全に動作します。UIのポップアップ内の仮想化

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <ToggleButton IsChecked="{Binding ElementName=Popup, Path=IsOpen, Mode=TwoWay}" 
         Content="Test"/> 

     <TreeView Grid.Row="1" ItemsSource="{Binding Nodes}" VirtualizingPanel.IsVirtualizing="True"> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
        <TextBlock Text="{Binding Data}"/> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 

     <Popup x:Name="Popup" StaysOpen="True"> 
      <TreeView ItemsSource="{Binding Nodes}" VirtualizingPanel.IsVirtualizing="True"> 
       <TreeView.ItemTemplate> 
        <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
         <TextBlock Text="{Binding Data}"/> 
        </HierarchicalDataTemplate> 
       </TreeView.ItemTemplate> 
      </TreeView> 
     </Popup> 
    </Grid> 

のViewModelとNodeクラス

public class ViewModel 
{ 
    public ObservableCollection<Node> Nodes { get; private set; } 
    public ViewModel() 
    { 
     Nodes = new ObservableCollection<Node>(); 
     Node parent = new Node("Parent"); 

     for (int i = 0; i < 10000; i++) 
      parent.Children.Add(new Node(i.ToString())); 

     Nodes.Add(parent); 
    } 
} 
public class Node 
{ 
    public string Data { get; set; } 

    public List<Node> Children { get; set; } 
    public Node(string data) 
    { 
     Data = data; 
     Children = new List<Node>(); 
    } 
} 

私は窓の内側に木の親を展開すると、ポップアップ内の1を拡大しながら、それには時間がかかりません〜20代がかかります。

MSはこれが2010sのバグであることを確認し、ControlTemplateを使用してToggleButtonとTreeViewを1つのコントロールにマージすることを提案しましたが、私には何の効果もありませんでした。

答えて

1

は、あなたがする必要があるすべてはポップアップ

<Popup x:Name="Popup" StaysOpen="True" MaxHeight="500"> 

このことができますなぜ本当にわからないの(通常の高さは、あまりにも動作します)最大高さを指定することで、それを考え出しました。たぶんWPFは自動的に大きすぎるサイズ計算をする必要があるかもしれません。

関連する問題