データテンプレート間で列のサイズを変更しようとすると、奇妙な動作が発生します。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
オブジェクトに格納することでカテゴリー間で列の幅をバインドしようとしています。 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);
}
}
:今
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 ...笑:)ありがとう –