1

我尝试在 WPF中实现一个鼹鼠游戏。

Molehills 在UniformGrid中。根据选项,鼹鼠山是复选框或图像。麻烦来了。

我不知道如何实现UniformGrid以同时接受checkboxesimages
也许您对我如何解决它有更好的想法。也许用于复选框和图像的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的集合,因此我可以将CheckboxBitmapImage放在那里。

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

我考虑编写转换器,但这样的转换器必须知道指定的ObjectCheckBox还是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 回答