我正在学习一些WPF控件,并且无法在listView列中单独对齐文本。我已经能够将它们全部对齐,并对齐标题,而不是列数据本身。我很感激一些帮助它的工作。
请注意,这与此问题类似:WPF Listview, align listview item horizontal dynamic not in xaml
我还在博客上尝试过其他一些解决方案。虽然这似乎已经得到了回答,但我无法将其付诸实践。我想要"文件名"列数据左对齐,其他两列居中对齐。所有中心的标题都很好。
作为一个附带问题,显示这样的数据的首选方法是什么?我引用的问题提到DataGrid更容易使用。
代码:
private void saveSortOrder(ArrayList<String> sortCols, ArrayList<String> sortDirs) {
sortCols = new ArrayList<>();
sortDirs = new ArrayList<>();
for (TableColumn<MyType, ?> c : getSortOrder()) {
sortCols.add(c.getText());
sortDirs.add(c.getSortType().toString());
}
}
private void applySortOrder(ArrayList<String> sortCols, ArrayList<String> sortDirs) {
List<TableColumn<MyType, ?>> sortOrder = getSortOrder();
sortOrder.clear();
for (int ix = 0; ix < sortCols.length; ix++) {
for (TableColumn<MyType, ?> c : unchangedColumns) {
if (c.getText().equals(sortCols[ix])) {
sortOrder.add(c);
c.setSortType(TableColumn.SortType.valueOf(sortDirs[ix]));
}
}
}
}
**编辑:** 修正了这样做:
参考几个地方,&#34; DisplayMemberBinding&#34;优先于其他任何事情。我只需要定义一个&#34; DataTemplate&#34;为每一列并绑定&#34; TextBlock.Text&#34;到正确的&#34;绑定路径&#34;。然后删除&#34; DisplayMemberBinding&#34;引用。
<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>
答案 0 :(得分:1)
很简单,您的标题会自动使用TextBlock
,因为您没有指定容器,请在每个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>