2

いくつかの個別の関連する質問があります。私はWPFを初めて使用するので、これについては我慢してください。

IFarmyardSpacesの2D配列があります。これらの一部は、FenceSpaces、一部はFieldSpacesなどです。基本的に、これらの各スペースにバインドするボタンのグリッドが必要です。IFarmyardSpaceのタイプに応じて適切なボタンスタイルを使用します。

ここで質問:1)本質的にチェッカーボードタイプのレイアウトを簡単にデータバインドし、個々のアイテムをさまざまな方法でスタイル設定することは可能ですか?

2)そうでなく、ボタンを個別に作成してバインドする必要がある場合、2D配列内の特定のオブジェクトにボタンをバインドするにはどうすればよいですか?FarmyardSpaces [0,3]にあるFenceSpaceにバインドするボタンが必要な場合のように?

前もって感謝します!

4

2 に答える 2

2

はい、1)の両方を行うことができます。基本は、各アイテムが別のItemsControlであるItemsControlが必要であるということです(行、列を取得するため)。テンプレートを変更するには、ItemTemplateを明示的に割り当てる代わりに、DataTypeがありKeyがないDataTemplateリソースを使用するのが最も簡単な方法です。DataTemplateSelectorを使用することもできますが、これにはもう少しコードが必要です。テンプレートは次のようになります。

<Window.Resources>
    <DataTemplate DataType="IFarmyardSpaces">
        <Button Style="..."/>
    </DataTemplate>
    <DataTemplate DataType="FenceSpaces">
        <Button Style="..."/>
    </DataTemplate>
</Window.Resources>

そして、ItemsControlは次のようになります。ここでは、UniformGridを使用して、均等に分割されたグリッドレイアウトを取得します。

<ItemsControl ItemsSource="{Binding TwoDArray}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="1"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Rows="1"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

配列がすべて同じサイズでない場合の配置や、同じタイプを別のコントロールにバインドしている場合にテンプレートが他の場所に適用されるなどの問題が発生する可能性がありますが、これで少なくとも開始できます。

于 2013-01-29T18:35:35.110 に答える
0

IValueConverterを使用してそれを行うことができます。私はこれをWindows8Metroアプリで行い、ブログに書いています: http ://jwillmer.de/blog/2012/11/02/how-to-display-different-items-in-a-gridview/

MSDNで、IValueConverterの別の例を見つけました。http://msdn.microsoft.com/en-us/library/windows/apps/BR209903問題の解決に役立つことを願っています;-)

于 2013-01-29T18:19:39.830 に答える