2016-05-25 17 views
0
私は列を作成し、ソートやリサイズ機能を持つために、標準のWPFを使用して、複数の列ヘッダと私自身のツリービュー

WPFのTreeView ItemTemplateにはalighments

  • ドックパネル
  • のDataGridを制御を作成してい

    。 DataGridの高さはわずか25です。ここではデータを表示しないでください。階層と

  • のTreeViewコントロール私はちょうど問題と

    は、アカウントの種類は関係なく常にで展開されているどのように多くのレベル左側に揃えるべきではないXAMLコードを理解するために画像を追加してい

「最初の列」どこかに私は考えを失ったTreeViewItemTemplateのXAMLで

は...誰もがアラインメントを修正するために私を助けることができる

enter image description here

<DockPanel DataContext="{StaticResource cust}"> 
    <Button Command="{Binding rld}" Content="reload" DockPanel.Dock="Top"/> 
    <!--Unbound DataGrid just to display the headers--> 
    <DataGrid Height="25" DockPanel.Dock="Top" ItemsSource="{Binding Customers}" AutoGenerateColumns="False" Margin="0,0,0,0"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}" Header="Name" x:Name="col0"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding AccountType}" Header="Account Type" x:Name="col1"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
    <!--Actual Binding with Tree View and item Template to display the properties--> 
    <TreeView ItemsSource="{Binding Customers}" DockPanel.Dock="Top"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding rel}"> 
       <Grid HorizontalAlignment="Stretch"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="{Binding ElementName=col0,Path=ActualWidth}"></ColumnDefinition> 
         <ColumnDefinition Width="{Binding ElementName=col1,Path=ActualWidth}" ></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0" Text="{Binding Name}" VerticalAlignment="Center"/> 
        <TextBlock Grid.Column="1" Text="{Binding AccountType}" VerticalAlignment="Center" /> 
       </Grid> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
</DockPanel> 

答えて

0

TreeView自然にインデントされた子アイテムなので、表示されているとおりです。

AccountType TextBlockに負の左余白を設定して、インデントの値を同じにすることで、ギャップを中和することができます。 親が展開されている場合にのみ適用する必要があります。これは、あなたのビューモデルを少し変更することで簡単に行うことができます。

<TextBlock Grid.Column="1" Margin="{Binding marginPropertyInVM}" Text="{Binding AccountType}" VerticalAlignment="Center"/> 
0

あなたはにあなたのテンプレートグリッドの列定義を変更することによって、あなたの最初の列のサイズを制限することができます:最初の列のみが2列目とインデント一度、残りの幅が許可されます

<Grid HorizontalAlignment="Stretch"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
     <ColumnDefinition Width="{Binding ElementName=col1,Path=ActualWidth}" ></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <TextBlock Grid.Column="0" Text="{Binding Name}" VerticalAlignment="Center"/> 
    <TextBlock Grid.Column="1" Text="{Binding AccountType}" VerticalAlignment="Center" /> 
</Grid> 

この道を彼らのスペースが割り当てられています。

+0

もし私がこのようにすれば、アライメントはもっとうんざりしてしまいます。私はそれを試します。 – user2160275

+0

@ user2160275ああ、ごめんなさい。実際に接続されていないデータグリッドヘッダーとツリービューを揃えようとしているので、これは難しいかもしれません。私はこれがあなたが望む機能を提供していると思うので、TreeListViewを使うことを検討することをお勧めします。 – PlantPorridge

関連する問題