and*_*egn 4 wpf xaml visual-studio
我试图让 ListView 中的文本与单元格的顶部对齐。
这是我到目前为止所做的:
数据绑定如下:
<ListView.View>
  <GridView>
    <GridViewColumn Width="50">
      <GridViewColumn.CellTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor,
                                        AncestorType={x:Type ListViewItem}},
                                    Converter={StaticResource lviIndexToString}}"
                     Foreground="White"
                     VerticalAlignment="Top"/>
        </DataTemplate>
      </GridViewColumn.CellTemplate>
    </GridViewColumn>
    <GridViewColumn Width="80">
      <GridViewColumn.CellTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding LogTime}"
                     Foreground="{StaticResource ConsoleOrange}"/>
        </DataTemplate>
      </GridViewColumn.CellTemplate>
    </GridViewColumn>
    <GridViewColumn Width="80">
      <GridViewColumn.CellTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding MessageType}"
                     Foreground="{Binding MessageType,
                         Converter={StaticResource logMsgToColor}}"/>
        </DataTemplate>
      </GridViewColumn.CellTemplate>
    </GridViewColumn>
    <GridViewColumn DisplayMemberBinding="{Binding Path=Message}"/>
  </GridView>
</ListView.View>
的ItemContainer是风格是这样的:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="ListViewItem">
      <Grid>
        <GridViewRowPresenter VerticalAlignment="Stretch">
          <GridViewRowPresenter.Resources>
            <Style TargetType="ContentPresenter">
              <Setter Property="Margin" Value="1"/>
              <Setter Property="VerticalAlignment" Value="Stretch"/>
            </Style>
          </GridViewRowPresenter.Resources>
        </GridViewRowPresenter>
      </Grid>
    </ControlTemplate>
  </Setter.Value>
</Setter>
如果 ContentPresenters VerticalAlignment 设置为“Stretch”,则它有效。但是,视觉树显示 ContentPresenter 样式被某些东西覆盖,但我终生无法弄清楚是什么。

如果有人知道如何设置嵌套的 ContentPresenters 属性,或者教我如何设置自定义 GridViewRowPresenter 以更好地控制如何显示数据,我会非常感激。
如果在其他地方已经回答了这个问题,我深表歉意,但是我的 google-fu 搜索(以及这里的搜索)没有发现任何有用的解决方案。
要覆盖VerticalAlignmentproperty 的值ContentPresenter,我们需要使用更高的优先级设置它。动画按优先顺序保持第 2 位。
<ListView.Resources>
    <Style TargetType="ContentPresenter">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard >
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="VerticalAlignment">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0">
                                <DiscreteObjectKeyFrame.Value>
                                    <VerticalAlignment>Top</VerticalAlignment>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</ListView.Resources>
另一种方法是处理ContentPresenter.Loaded事件并在那里设置属性值。
  <Style TargetType="ContentPresenter">
         <EventSetter Event="Loaded" Handler="ContentPresenter_Loaded"/>
  </Style>
处理程序:
void ContentPresenter_Loaded(object sender, RoutedEventArgs e)
{
    (sender as ContentPresenter).VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
}
使用Loaded事件处理程序更改属性也可以使用Blend Behaviors / Attached Property。
| 归档时间: | 
 | 
| 查看次数: | 1531 次 | 
| 最近记录: |