1
當我嘗試跨數據模板調整列大小時,我遇到了一些奇怪的行爲。爲GridViewColumn調整大小正在做奇怪的事情
背景:
我有一個外ListView
這勢必一組類別。然後我有一個內部的ListView
,我認爲它有一個GridView
。 現在我已經將GridViewColumn
寬度綁定到GridViewColumnHeader
,以便相應地調整GridViewColumns
。
示例代碼:
<ListView ItemsSource="{Binding Categories, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Description}">
<ListView ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<!-- Description column -->
<GridViewColumn Width="{Binding ElementName=DescriptionCol, Path=Width}">
<GridViewColumn.Header>
<GridViewColumnHeader Name="DescriptionCol" Content="Description"
SizeChanged="Description_Column_SizeChanged"
HorizontalContentAlignment="Left"
Loaded="Description_Column_Loaded">
</GridViewColumnHeader>
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Name="DescriptionTextBlock" Text="{Binding Description}"
Style="{StaticResource TextBlock_GridEntries_Style}"
Margin="{Binding HierarchyLevel, Mode=OneWay, Converter={StaticResource HierarchyToMarginConverter}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Expander>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
現在我試圖通過捕獲GridViewColumnHeaders
對象並將其存儲在一個特殊的GridViewColumnCommunal
對象綁定跨類別列寬。
private GridViewColumnCommunal descriptionColumns = new GridViewColumnCommunal();
private void Description_Column_Loaded(object sender, RoutedEventArgs e)
{
var gridViewColHeader = sender as GridViewColumnHeader;
if (descriptionColumns != null)
{
descriptionColumns.AddColumnToListAndResize(gridViewColHeader);
}
}
凡GridViewColumnCommunal
類:
public class GridViewColumnCommunal
{
private List<GridViewColumnHeader> _columns = new List<GridViewColumnHeader>();
public List<GridViewColumnHeader> Columns
{
get { return _columns; }
set { _columns = value; }
}
public void UpdateColumnsItemsWithLargestColumnWidth()
{
if (Columns != null)
{
var maxWidth = Columns.Max(x => x.ActualWidth);
foreach (var column in Columns)
{
column.Width = maxWidth;
}
}
}
public void AddColumnToListAndResize(GridViewColumnHeader columnToAdd)
{
if (columnToAdd != null && Columns != null && !Columns.Contains(columnToAdd))
{
Columns.Add(columnToAdd);
UpdateColumnsItemsWithLargestColumnWidth();
}
}
public void UpdateColumnsWithNewWidth(Size size)
{
if (Columns != null)
{
foreach (var column in Columns)
{
column.Width = size.Width;
}
}
}
}
現在,當我嘗試調整任何少量列,它就會通過一個顯著量調整。作爲一個樣本:
你是一個絕對的傳說。這已經解決了這個問題! –
@blake_griffin我知道...:D ... lol :)謝謝 –