在自定义控件中将转换器用作静态资源时,即使关闭窗口,也会发生内存泄漏。
随附示例,请在下面找到屏幕截图。
请问您对此有何建议?
注意:我已经在ANTS个人资料中进行了检查。
创建自定义控件的示例代码。此控件用于简单示例。
带有示例说明的内存泄漏复制步骤:
在简单的示例中使用创建的自定义控件。
在关闭窗口之前和之后,(哪个窗口具有创建的自定义控件)检查ANTS配置文件中的内存泄漏。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:customcontrol">
<local:YesNoToBooleanConverter x:Key="YesNoToBooleanConverter"/>
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<StackPanel Orientation="Horizontal">
<TextBox Name="txtValue" Height="50" Width="100" />
<CheckBox IsChecked="{Binding ElementName=txtValue,
Path=Text,
Converter={StaticResource YesNoToBooleanConverter}}" />
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
}
public class YesNoToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
switch (value.ToString().ToLower())
{
case "yes":
return true;
case "no":
return false;
default:
return Binding.DoNothing;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (value is bool)
{
if ((bool)value == true)
return "yes";
else
return "no";
}
return "no";
}
}
关于, Priyanga B