【问题标题】:WPF - TextBlocks in ListView are not horizontal alignedWPF - ListView 中的文本块未水平对齐
【发布时间】:2017-05-12 07:59:43
【问题描述】:

我在 WPF 应用程序中使用不同的 TextBlocks 创建了一个 ListView。每行可以包含多个 TextBlock,但当一行包含多个文本块时,第一个适合该行,但后面的 TextBlock 不会水平对齐(见图)。我不知道这可能是什么原因,所以我希望有人能提供一些澄清。

下面是 XAML 代码。

<ListView ItemsSource="{Binding DataContext.Mechanics, RelativeSource={RelativeSource AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}" Height="auto" Width="1330" 
             Grid.Row="2" Grid.ColumnSpan="13" BorderThickness="0" Background="#FFF2F2F2">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="18"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="22"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="1200"/>
                    </Grid.ColumnDefinitions>
                    <Label Content="{Binding MecID}" Grid.Column="0" Padding="0" FontSize="11" Background="#FFF2F2F2"/>
                    <Label Content="{Binding Name}" Grid.Column="1" Padding="0" FontSize="11" Margin="2, 0, 0, 0"/>
                    <ListView ItemsSource="{Binding MecJobs, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Padding="-1" Height="18" Width="1200" Grid.Column="2" ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                             ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="White">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="ListBoxItem">
                                <Setter Property="Padding" Value="0"/>
                            </Style>
                        </ListView.ItemContainerStyle>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Canvas>
                                    <ListViewItem Width="{Binding EstimatedTimeWidth}" Canvas.Left="{Binding Margin}" Background="{Binding Color}" Height="18" 
                                               Padding="0" Margin="0" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                                        <TextBlock TextAlignment="Center" Height="18" Padding="0" Margin="0">
                                            <TextBlock.Text>
                                                <MultiBinding StringFormat="{}{0} - {1}">
                                                    <Binding Path="RegNumber" />
                                                    <Binding Path="CustomerName" />
                                                </MultiBinding>
                                            </TextBlock.Text>
                                        </TextBlock>
                                    </ListViewItem>
                                </Canvas>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ListView>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Padding" Value="0"/>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
</Grid>

编辑:当 ListView 设置为包含一个带有 Orientation="Horizo​​ntal" 的 Stackpanel 时,问题就解决了。

【问题讨论】:

  • 你确定你的意思是水平的吗?
  • 当然。查看第一行,以及每个 TextBlock 的 TextBlock 是如何“下降”几个像素的。
  • 是的,但这不是垂直的吗?
  • 我现在明白你的意思了。是的,你可以说它们不在同一条垂直线上。至少对于 TextBlocks 的顶部。
  • 您可以尝试从ListView 中删除Padding="-1" 并检查结果吗?

标签: c# wpf xaml


【解决方案1】:

我认为,如果您将列表视图项的样式添加到项容器样式中,您的问题就会得到解决。 如果不只是将设置器移动到您的列表框项目样式。

<ListView ItemsSource="{Binding DataContext.Mechanics, RelativeSource={RelativeSource AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}" Height="auto" Width="1330" 
             Grid.Row="2" Grid.ColumnSpan="13" BorderThickness="0" Background="#FFF2F2F2">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="18"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="22"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="1200"/>
                    </Grid.ColumnDefinitions>
                    <Label Content="{Binding MecID}" Grid.Column="0" Padding="0" FontSize="11" Background="#FFF2F2F2"/>
                    <Label Content="{Binding Name}" Grid.Column="1" Padding="0" FontSize="11" Margin="2, 0, 0, 0"/>
                    <ListView ItemsSource="{Binding MecJobs, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Padding="-1" Height="18" Width="1200" Grid.Column="2" ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                             ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="White">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="ListBoxItem">
                                <Setter Property="Padding" Value="0"/>
                            </Style>
                        </ListView.ItemContainerStyle>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Canvas>
                                    <ListViewItem Width="{Binding EstimatedTimeWidth}" Canvas.Left="{Binding Margin}" Background="{Binding Color}" Height="18" 
                                               Padding="0" Margin="0" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                                        <TextBlock TextAlignment="Center" Height="18" Padding="0" Margin="0">
                                            <TextBlock.Text>
                                                <MultiBinding StringFormat="{}{0} - {1}">
                                                    <Binding Path="RegNumber" />
                                                    <Binding Path="CustomerName" />
                                                </MultiBinding>
                                            </TextBlock.Text>
                                        </TextBlock>
                                    </ListViewItem>
                                </Canvas>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ListView>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Padding" Value="0"/>                    
            </Style>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
</Grid>

【讨论】:

  • 谢谢,但这也没有解决问题。
猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2013-08-14
  • 2019-10-09
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多