2013-12-02 3 views
1

Я пытаюсь сделать вид дерева, чтобы выглядеть как можно больше, как этоTreeview формат узел

My computer win 7 pro

Дело в том, я сомневаюсь, что это вид дерева в качестве привода в своем роде и я не мог сделать это в обычном древовидном представлении.

Моя конечная цель состоит в том, чтобы сделать его выглядеть так:

enter image description here

Щас управления мы использовали уже вид дерева с HierarchicalDataTemplate но последний уровень представляет собой набор, который повторял это собственный шаблон, поэтому 1 узел на элемент. Я cna удаляю его без проблем, и я знаю HierarchicalDataTemplate, который является последним элементом, который содержит этот элемент, поэтому я решил просто добавить панель обертывания, и в нем добавлен элемент управления, который выполняет итерацию внутри подкатегории, и это сработало, но HierarchicalDataTemplate считают на том, что я назвал «строкой заголовка» узла. а не под ним. здесь быстрая картина того, что я имел в виду, как она генерируется.

enter image description here

узел +/- в конечном итоге в середине пунктов, но проблема в том, что существует несколько сотен элементов там и прокрутка этого не любят. Также, когда я нажимаю на узел, он выделяет все, и он закручивает полосу прокрутки с правой стороны. Я поставил красную пунктирную линию, элемент выбирает, что он думает об этом.

Так что я пытаюсь реплицировать «Мой компьютер» в win7, но с дополнительным уровнем и без проблем с узлами. Каждый элемент должен быть индивидуально нажат на кнопку, так как они перетаскиваются, и они являются частью нашего продукта и представляют собой 3d-модели, вдвинутые в окно двигателя CAD в том же окне.

У меня даже есть хороший контроль над задачей?

  • Edit * Другой пример в Excel 2010 попробуйте открыть меню клипа появится панель инструментов. все элементы находятся в панели обертки. Я хочу это, но с группой/подгруппами.

  • Редактировать 2 * Кто-нибудь может знать пользовательский элемент управления или элемент управления, который Microsoft использует для создания своего проводника?

+0

У вас есть более одного уровня? Если вы не считаете, что используете 'ItemsControl', где каждый элемент' Expander' с 'ListBox', содержащий ваши элементы? – dkozl

+0

Да, у меня более 1 уровня. но узел, содержащий список элементов, является последним его уровнем.Используя пример Folder/File, я имею в виду, что у меня может быть папка в папке с бесконечным уровнем, но если в папке есть файл, WONT имеет любую папку, а только файлы. Это действительно только формат Grouping – Franck

+0

, который хочет добавить, что список предметов не совпадает на одном уровне. i.e: у меня есть тот, который: 'Раздел/Воздушный фильтр/[Элементы]' другой, который является 'Секция/Охлаждение/Воздух/[Элементы]' и 'Раздел/Охлаждение/Вода/[Элементы]' – Franck

ответ

1

Обнаружено, как легко реплицироваться. требовалось 2 шаблона ниже

<DataTemplate DataType="{x:Type local:C3DGalleryFolder}"> 
     <StackPanel> 
      <Expander Header="{Binding Name}" FontWeight="DemiBold" Background="White"> 
       <ItemsControl Margin="20,0,0,0" ItemsSource="{Binding ListItem, Converter={StaticResource GallerySort}}"/> 
      </Expander> 
     </StackPanel> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type local:C3DGalleryItems}"> 
     <ItemsControl Margin="15,0,0,0" Name="ItemListing" ItemsSource="{Binding Path=ListItem, Converter={StaticResource GallerySort}}" > 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel Orientation="Horizontal" Background="White"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid Margin="3" Background="White" HorizontalAlignment="Center" VerticalAlignment="Center" > 
         <Border Background="White" Height="190" Width="120" Margin="1" BorderThickness="1" BorderBrush="DarkBlue" CornerRadius="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
          <Grid Background="White" Margin="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="118"/> 
            <RowDefinition Height="*"/> 
           </Grid.RowDefinitions> 
           <Polygon Points="-1,-1 20,-1 -1,20" Stroke="Black" Fill="DarkBlue" Panel.ZIndex="1000000" /> 
           <Image Grid.Row="0" Source="{Binding ImagePath}" Stretch="Uniform" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="5,5,5,5" RenderOptions.BitmapScalingMode="HighQuality" SnapsToDevicePixels="True"></Image> 
           <TextBlock Grid.Row="1" TextWrapping="Wrap" FontWeight="Regular" Foreground="DarkBlue" Text="{Binding Name}" Width="110" TextAlignment="Center" VerticalAlignment="Center" /> 
          </Grid> 
         </Border> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </DataTemplate> 

Также требуется простое управление товаром

<ItemsControl Margin="10,0,0,0" Name="lst3dgallery" ItemsSource="{Binding List3DGallery, Converter={StaticResource GallerySort}}" /> 

то модель очень проста, что вы создаете коллекцию элементов добавить папку и в них вы добавляете коллекции предметов, которые содержат сами предметы

[Serializable()] 
public class C3DGallery 
{ 
    public string Name { get; set; } 
    public ObservableCollection<C3DGallery> ListItem { get; set; } 
    public C3DGallery() 
    { 
     Name = ""; 
     ListItem = new ObservableCollection<C3DGallery>(); 
    } 
} 

[Serializable()] 
public class C3DGalleryFolder : C3DGallery 
{ 
    public C3DGalleryFolder(string sName) 
    { 
     Name = sName; 
     ListItem = new ObservableCollection<C3DGallery>(); 
    } 
} 

[Serializable()] 
public class C3DGalleryItems : C3DGallery 
{ 
    public C3DGalleryItems() 
    { 
     Name = ""; 
     ListItem = new ObservableCollection<C3DGallery>(); 
    } 
} 

[Serializable()] 
public class C3DGalleryItem : C3DGallery 
{ 
    public string ImagePath { get; set; } 
    public object Item { get; set; } 

    public C3DGalleryItem(object oItem, string sName, string sImagePath) 
    { 
     Name = sName; 
     ImagePath = ""; 
     Item = oItem; 
     if (File.Exists(sImagePath)) { ImagePath = sImagePath; } 
    } 
} 
Смежные вопросы