创建WPF分层树视图而不在资源中创建模板

时间:2014-03-21 22:13:06

标签: c# wpf xaml treeview

我想创建一个分层的TreeView。但我不想在<中创建ItemsTemplate。 StackPanel.Resources>因为这会影响我的虚拟化。也就是说,我不想在TreeView中使用 ItemsSource =" {Binding Source = {StaticResource dataItems}} 。这是我的XAML。有人可以提出另一种方法来创建一个带有ItemsTemplate的TreeView,以便我可以保留虚拟化吗?

<StackPanel>
    <StackPanel.Resources>
        <exportImport:TreeViewDashboard x:Key="dataItems"/>
        <HierarchicalDataTemplate DataType="{x:Type exportImport:TreeViewDashboard}"
                                  ItemsSource="{Binding Path=Components}">

            <Grid  Margin="2" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition ></ColumnDefinition>
                    <ColumnDefinition ></ColumnDefinition>
                    <ColumnDefinition ></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <CheckBox Name="checkbx" Grid.Column="0" Margin="2" 
                          Tag="{Binding Path=Tag}" 
                          Checked="OnCheck" Unchecked="OnUnCheck"></CheckBox>
                <Image Margin="2" Grid.Column="1" Source="{Binding Path=ImageUrl}"  
                       Height="14" Width="16" ></Image>
                <TextBlock Margin="2" Grid.Column="2" Text="{Binding Path=Name}"
                          FontWeight="Bold" />
            </Grid>

            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <Grid  Margin="2" >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition ></ColumnDefinition>
                            <ColumnDefinition ></ColumnDefinition>
                            <ColumnDefinition ></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <CheckBox Name="checkbx" Grid.Column="0" Margin="2" 
                                  Tag="{Binding Path=Tag}" 
                                  Checked="OnCheck" Unchecked="OnUnCheck"/>
                        <Image Margin="2" Grid.Column="1" 
                               Source="{Binding Path=ImageUrl}" 
                               Height="14" Width="16" />
                        <TextBlock Margin="2" Grid.Column="2" 
                              Text="{Binding Path=Name}" FontWeight="Bold" />
                    </Grid>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>

        </HierarchicalDataTemplate>
    </StackPanel.Resources>

    <TreeView Name="tvES"  BorderThickness="0" 
          ItemsSource="{Binding Source={StaticResource dataItems}}"
          VirtualizingStackPanel.IsVirtualizing="True"
          VirtualizingStackPanel.VirtualizationMode="Recycling"
          TreeViewItem.Expanded="item_Expanded"
          TreeViewItem.Collapsed="item_Collapsed" >
        <TreeView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel/>
            </ItemsPanelTemplate>
        </TreeView.ItemsPanel>
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <Setter Property="IsExpanded" Value="False" />
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
</StackPanel> 

0 个答案:

没有答案