我有一个包含列表视图的扩展器。扩展器最初被禁用,并在应用程序启动后启用。
如果在 InitializeComponent() 之前我用至少一个项目填充 ListView 的 ItemsSource(一些可观察的集合,当然是在 InitializeComponent 之前创建的),那么一切都很好。扩展器正确展开,项目按应有的方式显示。那么唯一的问题是需要更多空间才能呈现的新项目出现裁剪 - 我认为这意味着 ListView 没有正确刷新?
但是,如果我在 InitializeComponent() 之后的任何时候向集合中添加项目,扩展器只会扩展一点(只有几个像素)。当我强制 ListView 的 Width 为某个较大的值时,扩展器确实会扩展,但插入到列表中的项目仅以背景颜色呈现,没有内容......
我认为这与 ListView 初始化、刷新或你有什么有关。代码如下:
XAML:
<DockPanel Name="mainPanel">
<Expander DockPanel.Dock="Right" ExpandDirection="Right" IsExpanded="False" IsEnabled="{Binding ExpanderEnabled}">
<Expander.Style>
<Style TargetType="Expander">
<Setter Property="Background" Value="#FFFF3333" />
<Style.Triggers>
<DataTrigger Binding="{Binding ExpanderEnabled}" Value="True">
<Setter Property="Background" Value="LightGreen" />
</DataTrigger>
</Style.Triggers>
</Style>
</Expander.Style>
<Expander.Header>
<Grid Width="30" VerticalAlignment="Top" HorizontalAlignment="Left">
<Grid Width="300" Height="300" VerticalAlignment="Top" HorizontalAlignment="Left">
<TextBlock Text="Expander Name" FontSize="12" FontWeight="Bold" Margin="22,170,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" RenderTransformOrigin="0,1">
<TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="-90"/>
<TranslateTransform/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
</Grid>
</Grid>
</Expander.Header>
<ListView ItemsSource="{Binding Items}" BorderBrush="LightGreen" BorderThickness="3">
<ListView.Style>
<Style TargetType="ListView">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Black"/>
</Style.Resources>
</Style>
</ListView.Style>
<ListView.View>
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn DisplayMemberBinding="{Binding Path=A, Converter={StaticResource aConverter}}" Width="Auto" />
<GridViewColumn DisplayMemberBinding="{Binding Path=B, Converter={StaticResource bConverter}}" Width="Auto" />
<GridViewColumn DisplayMemberBinding="{Binding Path=C, Converter={StaticResource cConverter}}" Width="Auto" />
<GridViewColumn DisplayMemberBinding="{Binding Path=D, StringFormat='\{0\} ds'}" Width="Auto" />
</GridView>
</ListView.View>
</ListView>
</Expander>
...