将PutCheckBox或图像放入UniformGrid

时间:2012-06-14 03:40:49

标签: c# wpf universal uniformgrid

我尝试在WPF中实现Whac a mole game

Molehills在 UniformGrid 中。根据选项,molehills是复选框或图像。这就麻烦了。

我不知道如何实现 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>

Moles 对象的集合,以便我可以放置复选框 BitmapImage

不幸的是,在向集合中添加了一些 BitmapImage 后,它们无法正确显示(而不是图像,而是写成: System.Windows.Media.Imaging.BitmapImage )。如果我将 CheckBox es添加到集合中,它们会很好地显示。

我考虑过编写转换器但是这样的转换器必须知道指定对象 CheckBox 还是 BitmapImage 。即使可以编码,也不是很优雅的解决方案

1 个答案:

答案 0 :(得分: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中任何特定于视图的代码,例如CheckBoxes或{{1} }。通常,您希望将UI和业务逻辑层分开,这样就可以实现这一点。