我注意到了非常奇怪的行为。实际上有两个问题。看看这个gif:
在左侧有一个带有组的ListView。右边是一个没有gropus的ListView。这是相同的代码。不同之处在于,当满足某个条件时,就会创建组。
现在,第一件事。看看字体颜色。在没有分组的ListView中,有一个默认的蓝色。在带有组的ListView中,字体是黑色的。
第二件事。查看列大小调整。在没有组的ListView中,一切都按预期工作。但是在ListView with group中,有一些奇怪的事情在发生。当我增加Name列时,Limit列值会在某个阶段消失。整个内容都在移动。
我试图将ListView更改为DataGrid,但结果更糟。那么,这里会有什么问题呢?
这是我的小组的风格:
<Style TargetType="{x:Type GroupItem}" x:Key="CategoryStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding Name.IsDefault}" Value="False">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True" Width="200">
<Expander.Header>
<DockPanel Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Path=ActualWidth}">
<Button DockPanel.Dock="Right" Style="{StaticResource RoundBtnStyle}" Content="+"
Margin="0,0,28,0" Width="20" Height="20"
Tag="{Binding}"
Command="{Binding DataContext.AddItemToCategoryCommand, RelativeSource={RelativeSource AncestorType={x:Type app:DocumentControl}}}"
CommandParameter="{Binding Name}"
/>
<TextBlock Text="{Binding Name}"
FontWeight="Bold"
FontSize="22"
VerticalAlignment="Bottom"
Opacity="0.5" />
</DockPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
这是我的ListView简化版代码:
<ListView Name="listView" ItemsSource="{Binding Source={StaticResource items}}"
MouseDoubleClick="ListView_MouseDoubleClick"
>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSpentOverLimit}" Value="True">
<Setter Property="Background" Value="Maroon"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="ToolTip">
<Setter.Value>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="{app:Localize SpentOverLimitHint}" Margin="0,0,5,0"/>
<TextBlock Text="{Binding SpentOverLimit, Converter={StaticResource MoneyConverter}}"/>
</StackPanel>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<!-- Columns -->
<ListView.View>
<GridView AllowsColumnReorder="False" x:Name="gridView">
<GridViewColumn Header="{app:Localize Column_Name}" Width="150" DisplayMemberBinding="{Binding Name}"/>
</GridView>
</ListView.View>
<!-- Categories -->
<ListView.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource CategoryStyle}" />
</ListView.GroupStyle>
</ListView>
最后是CollectionViewSource:
<CollectionViewSource Source="{Binding Items}" x:Key="items">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="ParentCategory"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
这是怎么回事?
发布于 2019-04-22 19:26:37
您的字体颜色没有在您发布的XAML样式中设置,因此这意味着它是由父对象继承的,或者是您的问题中没有发布的样式。
GroupItem
的大小调整问题是由控件模板中的以下行引起的:
<Expander IsExpanded="True" Width="200">
你已经为你的扩展器元素硬编码了宽度' 200‘,这导致当它们的大小小于200时,它会覆盖其他网格列,使得事情看起来有点奇怪。
https://stackoverflow.com/questions/55798101
复制相似问题