gpt4 book ai didi

wpf - 如何在 GridViewRowPresenter 中设置 ContentPresenter 属性?

转载 作者:行者123 更新时间:2023-12-03 22:37:43 29 4
gpt4 key购买 nike

我试图让我的 ListView 中的文本与单元格的顶部对齐。

这是我到目前为止所做的:

数据绑定(bind)如下:

<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 样式正在被某些东西覆盖,但我终生无法弄清楚是什么。
enter image description here

如果有人知道如何设置嵌套的 ContentPresenters 属性,或者教我如何设置自定义 GridViewRowPresenter 以更好地控制如何显示数据,我将非常感激。

如果其他地方已经回答了这个问题,我深表歉意,但是我的 google-fu 搜索(以及这里的搜索)没有发现任何有用的解决方案。

更新
最终目标是将前 3 列中的文本与 ListViewItem 的顶部对齐。
enter image description here

最佳答案

覆盖 VerticalAlignment 的值房产 ContentPresenter ,我们需要设置一些更高的优先级。动画在 precedence order 中排名第二.

<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也。

关于wpf - 如何在 GridViewRowPresenter 中设置 ContentPresenter 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877926/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com