2

項目コントロールをデータソースにバインドし、グリッドを項目ホストとして使用しています。アイテムをグリッド内の正しいセルに配置し (これを行うことができます)、それらが互いに重ならないようにスタックしたいと考えています (アイテムをセルに挿入する方法がわかりません)。 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 を使用して項目を動的に作成されたスタックパネルに挿入する方法がわかりません

子の追加をインターセプトしてスタックパネルを追加し、子をグリッドからスタックパネルに移動することを考えて、グリッドから派生したクラスを作成しようとしましたが、アイテムホストで子を操作しようとすると、例外がスローされます。

最終的には、データソース内のアイテムをグリッド内の「セル」にバインドできるようにしたいだけです。複数のアイテムが同じセルにバインドされている場合は、それらを積み重ねてください。

4

2 に答える 2

1

HighCore が提案したようにデータ レベルでこれを行うこともできますが、現在のデータ構造には必要な情報が既に含まれているため、ItemsControl がそれを処理できるはずです。ListBox のアイテム コレクションにグループの説明を追加することを検討し、Panelが StackPanelであるGroupStyleを使用します。

于 2013-07-25T17:00:03.813 に答える