如何解决WPF-在模板中使用TextBox时的ListView呈现性能
我在ListView项模板中使用TextBox,并且当项源集合更改时,即使启用了虚拟化,UI上也存在明显的延迟(约0.5秒)。当我删除TextBox时,ListView立即呈现新项目,而没有任何问题。如您所见,TextBox为空,没有任何绑定,所以这不是问题。为什么TextBoxes的渲染如此缓慢?
<ListView
Name="ListViewParameters"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
VirtualizingPanel.ScrollUnit="Item"
ItemsSource="{Binding Path=MyParameters}"
SelectedItem="{Binding SelectedParameter}"
Padding="10"
Background="{StaticResource MaterialDesignBackground}"
>
<ListView.Resources>
<Style TargetType="GridViewColumnHeader">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignGridViewItem}">
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn x:Name="ParameterNameColumn">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Path=Name}"
Padding="0 -5"
Margin="0 -4"
/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="ParameterValueColumn">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox /> <!-- Problematic textbox -->
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True" Background="{StaticResource MaterialDesignBackground}">
<Expander.Header>
<TextBlock
Text="{Binding Path=Name}"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Foreground="{StaticResource PrimaryHueDarkBrush}"
/>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
解决方法
为什么TextBoxes的渲染这么慢?
文本框由一些底层的视觉元素组成,这些元素需要一些时间才能呈现。例如,这是使用默认TextBox
的{{1}}的视觉树的样子:
呈现效果总是比文字更慢。另一方面,它不应该那么慢。确保没有隐式禁用UI虚拟化,例如将ControlTemplate
放在ListView
中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。