簡體   English   中英

使用WPF XAML獨立對齊ListView列文本

[英]Align ListView Column Text independently with WPF XAML

我正在學習一些WPF控件,並且無法單獨對齊listView列中的文本。 我已經能夠將它們全部對齊,並對齊標題,而不是對齊列數據本身。 我會感謝一些幫助使其工作。

注意,這類似於以下問題: WPF Listview,將listview項水平動態對齊,不在xaml中

我還在博客上嘗試了其他解決方案。 盡管這似乎已經得到了回答,但我還是無法解決這個問題。 我希望“ Filename”列數據保持左對齊,而其他兩列居中對齊。 標頭都可以居中。

附帶的問題是,顯示這種數據的首選方法是什么? 我提到的這個問題暗示了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>

**編輯:**修復了此問題:

如所引用的幾個地方,“ 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>

容易,您的標頭會自動使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM