項目コントロールをデータソースにバインドし、グリッドを項目ホストとして使用しています。アイテムをグリッド内の正しいセルに配置し (これを行うことができます)、それらが互いに重ならないようにスタックしたいと考えています (アイテムをセルに挿入する方法がわかりません)。 stackpanel またはグリッド内の他のパネル)。
2 つのクラスの .cs ファイルは次のとおりです。
public class listofdata
{
public List<data> stuff { get; set; }
public listofdata()
{
stuff = new List<data>();
stuff.Add(new data(0, 0, "zeroa"));
stuff.Add(new data(0, 0, "zerob"));
stuff.Add(new data(1, 0, "onea"));
stuff.Add(new data(1, 0, "oneb"));
stuff.Add(new data(1, 1, "twoa"));
stuff.Add(new data(1, 1, "twob"));
}
}
public class data
{
public int x { set; get; }
public int y { set; get; }
public string text { get; set; }
public data(int x, int y, string text)
{
this.x = x;
this.y = y;
this.text = text;
}
}
}
ここに私のXAMLがあります
<Window x:Class="GridTester.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:GridTester"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" >
<Window.Resources>
<DataTemplate DataType="{x:Type src:data}">
<Button Content="{Binding text}"/>
</DataTemplate>
<src:listofdata x:Key="MyDataSource"> </src:listofdata>
</Window.Resources>
<ListBox Name="Main" ItemsSource="{Binding Source={StaticResource MyDataSource},Path=stuff}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="MyGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column" Value="{Binding x}"/>
<Setter Property="Grid.Row" Value="{Binding y}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Window>
私の問題は、「a」で終わるすべてのボタンが b で終わるボタンの下にあることです。XAML を使用して項目を動的に作成されたスタックパネルに挿入する方法がわかりません
子の追加をインターセプトしてスタックパネルを追加し、子をグリッドからスタックパネルに移動することを考えて、グリッドから派生したクラスを作成しようとしましたが、アイテムホストで子を操作しようとすると、例外がスローされます。
最終的には、データソース内のアイテムをグリッド内の「セル」にバインドできるようにしたいだけです。複数のアイテムが同じセルにバインドされている場合は、それらを積み重ねてください。