2014-11-28 3 views
0

My TreeView использует HierarchicalDataTemplate для отображения данных. TreeViewItem охватывает несколько строк и показывает, что переключатель Expander togglebout выравнивается по вертикали в середине.Изменение вертикального выравнивания расширителя TreeView togglebutton

Как заставить кнопку переключателя экспандера быть вертикально выровненной сверху?

код XAML:

<Window x:Class="TreeView.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<TreeView ItemsSource="{Binding Tables[Data]}"> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="TreeViewItem"> 
      <Setter Property="TreeViewItem.IsExpanded" Value="True"/> 
      <Style.Resources> 
       <Style TargetType="{x:Type Path}"> 
        <Setter Property="VerticalAlignment" Value="Top"/> 
       </Style> 
      </Style.Resources> 
     </Style> 
    </TreeView.ItemContainerStyle> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Structure}"> 
      <HierarchicalDataTemplate.ItemContainerStyle> 
       <Style TargetType="TreeViewItem"> 
        <Style.Resources> 
         <Style TargetType="{x:Type Path}"> 
          <Setter Property="VerticalAlignment" Value="Top"/> 
         </Style> 
        </Style.Resources> 
       </Style> 
      </HierarchicalDataTemplate.ItemContainerStyle> 
      <TextBlock Text="{Binding Text}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView>  

C# Код:

 public MainWindow() 
    { 
     InitializeComponent(); 
     DataTable dt = new DataTable("Data"); 
     dt.Columns.Add("Id", typeof(int)); 
     dt.Columns.Add("ParentId", typeof(int)); 
     dt.Columns.Add("Text"); 
     dt.Rows.Add(1, null, "Root node 1st line\nRoot node 2nd line\nRoot node 3rd line"); 
     dt.Rows.Add(2, null, "2nd root node 1st line\n2nd root node next line"); 
     dt.Rows.Add(3, 1, "One\nOne\nOne"); 
     dt.Rows.Add(4, 1, "Two\nTwo\nTwo"); 
     dt.Rows.Add(5, 2, "Three\nThree\nThree"); 
     dt.Rows.Add(6, 2, "Four"); 
     dt.Rows.Add(7, 3, "Five"); 
     dt.Rows.Add(8, 3, "Six"); 
     dt.Rows.Add(9, 4, "Seven"); 
     DataSet ds = new DataSet(); 
     ds.Tables.Add(dt); 
     ds.Relations.Add("Structure", dt.Columns["Id"], dt.Columns["ParentId"]); 
     dt.DefaultView.RowFilter = "ParentId IS NULL"; 
     DataContext = ds; 
    } 
+0

редактировать шаблон для просмотра дерева элемента. – pushpraj

+0

Не уверен, но вы используете шаблон для своего заголовка treeviewitems? Затем вам нужно рассчитать idention – deafjeff

+0

Просьба указать пример кода; Я не могу переопределить стиль при использовании HierarchicalDataTemplate. – vuduy

ответ

0

Подставляя это в ваши HierarchicalDataTemplates должны переместить символ внутри кнопки переключения в верхней части, но все же дать вам большое clickable area

Это установит стиль для f рвый уровень расширителей

<TreeView.ItemContainerStyle> 
    <Style TargetType="TreeViewItem"> 
     <Setter Property="TreeViewItem.IsExpanded" Value="True"/> 
     <Style.Resources> 
      <Style TargetType="{x:Type Path}"> 
       <Setter Property="VerticalAlignment" Value="Top"/> 
      </Style> 
     </Style.Resources> 
    </Style> 
</TreeView.ItemContainerStyle> 

Это позволит установить стиль для всех последующих уровней

 <HierarchicalDataTemplate.ItemContainerStyle> 
      <Style TargetType="TreeViewItem"> 
       <Style.Resources> 
        <Style TargetType="{x:Type Path}"> 
         <Setter Property="VerticalAlignment" Value="Top"/> 
        </Style> 
       </Style.Resources> 
      </Style> 
     </HierarchicalDataTemplate.ItemContainerStyle> 
+1

Я пробовал, но это не работает. Я представил исходники в вопросе сейчас. – vuduy

+0

Я добавил дополнительный код для первого уровня расширителей, если добавить, что вместо вашего текущего TreeView.ItemContainerStyle он должен работать – ndonohoe

+1

Пробовал это уже, и он не работает; как уровень первого уровня, так и вложенные уровни по-прежнему показывают глиф в вертикальном выравнивании. – vuduy

 Смежные вопросы

  • Нет связанных вопросов^_^