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>
Run Code Online (Sandbox Code Playgroud)
的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>
Run Code Online (Sandbox Code Playgroud)
如果 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>
Run Code Online (Sandbox Code Playgroud)
另一种方法是处理ContentPresenter.Loaded事件并在那里设置属性值。
<Style TargetType="ContentPresenter">
<EventSetter Event="Loaded" Handler="ContentPresenter_Loaded"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
处理程序:
void ContentPresenter_Loaded(object sender, RoutedEventArgs e)
{
(sender as ContentPresenter).VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
}
Run Code Online (Sandbox Code Playgroud)
使用Loaded事件处理程序更改属性也可以使用Blend Behaviors / Attached Property。
| 归档时间: |
|
| 查看次数: |
1531 次 |
| 最近记录: |