1

WPFでモグラたたきゲームを実装しようとしています。

モグラ塚はUniformGridにあります。オプションに応じて、モグラ塚はチェックボックスまたは画像になります。そして、ここで問題が発生します。

チェックボックスイメージの両方を受け入れるようにUniformGridを実装する方法がわかりません。たぶん、あなたは私がそれを解決する方法をもっとよく知っているでしょう。チェックボックスと画像の UniformGrid はお勧めできません

私はこのようにしてみました:

<ItemsControl Name="GameBlocksItemsControl" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=Moles}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=Conf.Cols}" 
                            Rows="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=Conf.Rows}" 
                            Name="MolesGrid">
            </UniformGrid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

MolesObjectのコレクションなので、そこにCheckboxまたはBitmapImageを配置できます。

残念ながら、いくつかのBitmapImageをコレクションに追加した後、それらは正しく表示されません (画像の代わりにSystem.Windows.Media.Imaging.BitmapImageと書かれています)。コレクションにCheckBoxを追加すると、それらはうまく表示されます。

コンバーターを作成することを検討しましたが、そのようなコンバーターは、指定されたオブジェクトCheckBoxまたはBitmapImageであるかどうかを知る必要があります。コード化できたとしても、それはあまり洗練されたソリューションではありません

4

1 に答える 1

0

個人的には、単ににItemTemplate基づいて設定しますSelectedViewOption

たとえば、SelectedViewOption簡単にするために を文字列と仮定します。

<Style x:Key="MyItemsControlStyle" TargetType="{x:Type ItemsControl}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding SelectedViewOption}" Value="Image">
            <Setter Property="ItemTemplate" Value="{StaticResource ImageTemplate}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding SelectedViewOption}" Value="CheckBox">
            <Setter Property="ItemTemplate" Value="{StaticResource CheckBoxTemplate}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

これにより、必要に応じて後で他のビュー オプションを簡単に追加できるだけでなく、 や などのビュー固有のコードを から削除することもできDataContextます。通常、UI レイヤーとビジネス ロジック レイヤーを分離する必要がありますが、これによりそれが可能になります。CheckBoxesImages

于 2012-06-14T13:28:36.270 に答える