2015-09-08 2 views
1

Я изучаю некоторые элементы управления WPF, и у меня возникают проблемы с индивидуальным выравниванием текста в столбцах listView. Мне удалось выровнять их все вместе и выровнять заголовки, а не сами данные столбца. Я был бы признателен за помощь в ее работе.Выравнивать текст столбца ListView независимо от WPF XAML

Как примечание, это похоже на этот вопрос: WPF Listview, align listview item horizontal dynamic not in xaml

Я также попытался некоторые другие решения в блогах. Хотя на этот вопрос ответили, я просто не могу заставить его работать. Я бы хотел, чтобы данные столбца «Имя файла» были выровнены по левому краю, а два других столбца выровнены по центру. Заголовки в порядке.

В качестве побочного вопроса, каков предпочтительный метод отображения таких данных? Вопрос, на который я ссылался, ссылался на DataGrid как на более легкую для работы.

Код:

 <ListView x:Name="edtListView" Margin="30,68,30,52" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       <EventSetter Event="MouseDoubleClick" Handler="HandleRow_DoubleClick" /> 
      </Style> 
     </ListView.ItemContainerStyle> 
     <ListView.View> 
      <GridView> 
       <GridView.ColumnHeaderContainerStyle> 
        <Style TargetType="{x:Type GridViewColumnHeader}"> 
         <EventSetter Event="Click" Handler="SortHeader_Click"/>        
        </Style> 
       </GridView.ColumnHeaderContainerStyle> 
       <GridViewColumn x:Name="fileNameColumn" DisplayMemberBinding="{Binding Path}" Width="450" TextBlock.TextAlignment="Left" > 
        <GridViewColumn.Header> 
         <GridViewColumnHeader Content="Filename" Tag="Path"/> 
        </GridViewColumn.Header> 
       </GridViewColumn> 
       <GridViewColumn DisplayMemberBinding="{Binding MissedEdts}" Width="50" TextBlock.TextAlignment="Center" > 
        <GridViewColumn.Header> 
         <GridViewColumnHeader Content="Missed" Tag="MissedEdts"/> 
        </GridViewColumn.Header> 
       </GridViewColumn> 
       <GridViewColumn DisplayMemberBinding="{Binding Notes}" Width="95" TextBlock.TextAlignment="Center" > 
        <GridViewColumn.Header> 
         <GridViewColumnHeader Content="Notes" Tag="Notes"/> 
        </GridViewColumn.Header> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 

** EDIT: ** Fixed это делает это:

Как указано пара мест, то "DisplayMemberBinding" имеет приоритет над чем-то еще. Мне просто нужно было определить «DataTemplate» для каждого столбца и привязать «TextBlock.Text» к правильному «Binding Path». Затем удалите ссылки «DisplayMemberBinding».

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}"> 
     <EventSetter Event="Click" Handler="SortHeader_Click"/> 
    </Style> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     <EventSetter Event="MouseDoubleClick" Handler="HandleRow_DoubleClick" /> 
    </Style> 
    <DataTemplate x:Key="value1Template"> 
     <TextBlock TextAlignment="Left" Text="{Binding Path}"/> 
    </DataTemplate> 
    <DataTemplate x:Key="value2Template"> 
     <TextBlock TextAlignment="Center" Text="{Binding MissedEdts}"/> 
    </DataTemplate> 
    <DataTemplate x:Key="value3Template"> 
     <TextBlock TextAlignment="Center" Text="{Binding Notes}"/> 
    </DataTemplate> 
</Window.Resources> 



<ListView x:Name="edtListView" Margin="30,68,30,52" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn x:Name="fileNameColumn" CellTemplate="{StaticResource value1Template}" Width="450" > 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Content="Filename" Tag="Path"/> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
      <GridViewColumn Width="50" CellTemplate="{StaticResource value2Template}"> 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Content="Missed" Tag="MissedEdts"/> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
      <GridViewColumn CellTemplate="{StaticResource value3Template}" Width="95" > 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Content="Notes" Tag="Notes"/> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

ответ

1

Easy, ваши заголовки автоматически использовать TextBlock «S, так как вы не указали контейнер, укажите их в каждом GridViewColumnHeader и вы можете делать то, что вы хотите с ним (ой, и вам нужно будет удалить DisplayMemberBinding так мы прямо определяем содержание заголовка сейчас), например:

  <GridViewColumn x:Name="fileNameColumn" Width="450" TextBlock.TextAlignment="Left" > 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Content="Filename" Tag="Path"> 
         <TextBlock Text="{Binding Path}" HorizontalTextAlignment="Right" FontSize="100"/> <!--This line--> 
        </GridViewColumnHeader> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
+0

Спасибо, не видели вашего ответа, прежде чем я разместил свой. Поскольку ваш более сжатый, я удаляю и добавляю его как отредактировать ответ. – user2079828

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