在DataGrid中使用Image控件显示数据库图片,并设定其ToolTip显示放大图,若记录数量较多,在列表显示后多次显示ToolTip,导致软件提示没有足够的内存继续执行程序 异常,解决方法:设定其绑定模式为OneTime。
<DataGrid Grid.Row="2" FontSize="14" x:Name="dgDetail"
ItemsSource="{Binding}"
AutoGenerateColumns="False" IsReadOnly="True"
GridLinesVisibility="All"
SelectionUnit="FullRow"
RowDetailsVisibilityMode="VisibleWhenSelected"
ScrollViewer.CanContentScroll="False"
VerticalGridLinesBrush="{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"
ColumnHeaderStyle="{StaticResource HeaderStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="#" Binding="{Binding rownum}" Width="Auto"/>
<DataGridTextColumn Header="id" Binding="{Binding Path=id}" Width="Auto" Visibility="Hidden"/>
<DataGridTemplateColumn Header="图像" Width="80">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding roi_pic, Converter={StaticResource covBytesToImageSource}, Mode=OneTime}">
<Image.ToolTip>
<DockPanel Width="300" Height="300">
<Image Source="{Binding roi_pic, Converter={StaticResource covBytesToImageSource}, Mode=OneTime}"/>
</DockPanel>
</Image.ToolTip>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
字节转换为ImageSource
/// <summary>
/// 字节数组转换为ImageSource
/// </summary>
public class Convert_BytesToImageSource : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
BitmapImage bi = new BitmapImage();
if (value is byte[] bytes)
{
try
{
MemoryStream ms = new MemoryStream();
bi.BeginInit();
ms.Write(bytes, 0, bytes.Length);
ms.Seek(0, SeekOrigin.Begin);
bi.StreamSource = ms;
bi.EndInit();
}
catch
{
}
}
return bi;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)