Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
FixedDataGrid.cs
Download fileToto je zdrojový kód souboru FixedDataGrid.cs
Fixing Silverlight DataGrid Row Auto-Resize only grows row height but won't shrink issue in DataGrid control.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
namespace SilverlightApplication
{
/// <summary>
/// Fixed DataGrid control
/// </summary>
/// <remarks>
/// Fixing issue: DataGrid Row Auto-Resize only grows row height but won't shrink
/// </remarks>
public class FixedDataGrid : DataGrid
{
/// <summary>
/// Overrides OnLoadingRow
/// </summary>
protected override void OnLoadingRow(DataGridRowEventArgs e)
{
if (double.IsNaN(this.RowHeight))
{
e.Row.Loaded += Row_Loaded;
}
base.OnLoadingRow(e);
}
private void Row_Loaded(object sender, RoutedEventArgs e)
{
var row = (DataGridRow)sender;
row.Loaded -= Row_Loaded;
for (int col = 0; col < this.Columns.Count; col++)
{
var cellElement = this.Columns[col].GetCellContent(row);
if (cellElement != null)
{
cellElement.SizeChanged += CellElement_SizeChanged;
}
}
}
private static void CellElement_SizeChanged(object sender, SizeChangedEventArgs e)
{
//Fix issue: DataGrid Row Auto-Resize only grows row height but won't shrink
var dataGrid = GetParentOf<DataGrid>((FrameworkElement)sender);
if (dataGrid != null && double.IsNaN(dataGrid.RowHeight))
{
var row = DataGridRow.GetRowContainingElement((FrameworkElement)sender);
//Fore recalculating row height
try
{
dataGrid.RowHeight = 0;
row.InvalidateMeasure();
row.Measure(row.RenderSize);
}
finally
{
//Restore RowHeight
dataGrid.RowHeight = double.NaN;
}
}
}
private static T GetParentOf<T>(FrameworkElement element) where T : FrameworkElement
{
while (element != null)
{
T item = element as T;
if (item != null)
{
return item;
}
element = (FrameworkElement)VisualTreeHelper.GetParent(element);
}
return null;
}
}
}