【发布时间】:2014-10-20 19:19:49
【问题描述】:
我开发了一个应用程序,它有一个数据网格,它有不同的列标题和行上下文菜单。现在对于标题上下文菜单,我已经过滤了数据网格列。代码sn-p如下。
<DataGrid Padding="3" BorderBrush="SkyBlue" BorderThickness="1" ItemsSource="{Binding Source={StaticResource cvsCoreData}}" SelectionUnit="FullRow" IsReadOnly="True" AutoGenerateColumns="False" x:Name="Data" Margin="0,5,0,28">
<DataGrid.Resources>
<ContextMenu x:Key="DataGridColumnHeaderContextMenu" >
<MenuItem Header="ABC" Click="ABC_Click" />
<MenuItem Header="EFG" Click="EFG_Click" />
<MenuItem Header="HIJ" Click="HIJ_Click" />
<MenuItem Header="KLM" Click="KLM_Click" />
</ContextMenu>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="SkyBlue" />
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
<Setter Property="ContextMenu"
Value="{StaticResource DataGridColumnHeaderContextMenu}" />
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTemplateColumn SortMemberPath="Key" Width="*" Header="Key ">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="block" TextWrapping="Wrap" Text="{Binding Key}">
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="*" Header="Lerm Description" Binding="{Binding KeyDescription}" />
<DataGridTextColumn Width="*" Header="Short " Binding="{Binding Short}" />
<DataGridTextColumn Width="*" Header="Rule" Binding="{Binding Rules}" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="ContextKey" IsCheckable="True" IsChecked="True" Header="Key" Unchecked="ContextMenu_Unchecked" Checked="ContextMenu_Checked" Tag="0" />
<MenuItem x:Name="ContextLermDescription" IsCheckable="True" IsChecked="True" Header="Key" Unchecked="ContextMenu_Unchecked" Checked="ContextMenu_Checked" Tag="1" />
<MenuItem x:Name="ContextShor" IsCheckable="True" IsChecked="True" Header="Short" Unchecked="ContextMenu_Unchecked" Checked="ContextMenu_Checked" Tag="2" />
<MenuItem x:Name="ContextRule" IsCheckable="True" IsChecked="True" Header="Rules" Unchecked="ContextMenu_Unchecked" Checked="ContextMenu_Checked" Tag="3" />
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
现在,当取消选中标题上下文菜单时,特定列将被隐藏,反之亦然。它工作正常,但是当我想隐藏最后一列时,我需要大约 5 秒,它分配了大量内存。当我在隐藏数据网格中的所有列之后使第一列可见时,也会发生同样的事情。为什么会发生这种内存泄漏。
【问题讨论】:
-
您使用什么 .net 框架? 3.5 或 4.0 或 ...
-
我正在使用 .NET 4.5 框架。
-
好吧,DataGridTemplateColumn 也有类似的问题。 (wpf.codeplex.com/discussions/400881) 但这已经用 4.5 解决了
-
我已经确定了问题所在。问题出在
DataGridRowStyle,如果我注释掉问题解决的那部分代码,但我不明白为什么会这样。我该如何解决这个问题!
标签: c# wpf xaml memory-leaks datagrid