首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF中的棋盘

WPF中的棋盘
EN

Stack Overflow用户
提问于 2009-12-28 00:01:52
回答 5查看 9.4K关注 0票数 5

多年来我一直使用Winforms进行开发,现在我想切换到WPF并制作一个棋盘。不幸的是,我不知道从哪里开始。使用WPF让我很不确定,我又觉得自己像个菜鸟了。有人能概述一下基本的设计吗?我想我会从一个8x8的网格开始,并使用矩形作为正方形,图像作为碎片。后来怎么样了?我是不是遗漏了什么?

编辑:这只是关于用户界面;幕后发生的事情是没有问题的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-28 00:32:03

标准网格的另一种选择是使用UniformGrid (msdn link)。

它可能更适合这个(在我看来),因为它总是给你相同大小的单元格。

使用的ala:

代码语言:javascript
复制
<UniformgGrid Columns="8" Rows="8">
    <Control1/>
    <Control2/>
    <Control3/>
</UniformGrid>

这些答案中的任何一个都会给你你想要的结果。

票数 10
EN

Stack Overflow用户

发布于 2009-12-28 02:15:14

Chess似乎非常适合WPF的MVVM代码模式。

模型将是国际象棋比赛的逻辑,听起来你可以控制它。视图将显示游戏的WPF外观,ViewModel将显示游戏的表示形式,视图可以在其中绑定数据。

对于视图,使用UniformGrid的ItemsControl将用于游戏的2D表示。

这是一个开始(未选中)

代码语言:javascript
复制
<ItemsControl ItemsSource="{Binding TheGame}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="8" Rows="8" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentControl Background="{Binding SquareColor}">
                <Path Data="{Binding PieceShape}" Fill="{Binding PieceColor}" />
            </ContentControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

要使上述方法起作用,您的ViewModel需要有一个ObservableCollection<ChessGridItem>,并且ChessGridItem应该是一个公开SquareColorPieceColorPieceShape的DependencyProperties的DependencyObject

票数 6
EN

Stack Overflow用户

发布于 2009-12-28 00:20:13

您可以在XAML或代码中使用相同的结果来创建UI。我最近开始使用WPF,我推荐使用XAML方法。一开始有点吓人,但很快就会变得熟悉起来。对我来说,这感觉像是一种精心设计的UI设计方法,而现在WinForms看起来就像是在之前出现的任何东西上给了.NET一巴掌。

您可以从拖放方法开始,但是如果您和我一样,您将很快使用XAML,并使用设计图面进行可视化检查。

我可能不会这样做,但是如果您看过任何XML或HTML,您可能会猜到这将显示什么,即使您以前从未看过任何XAML:

代码语言:javascript
复制
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="100" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="100" />
        <RowDefinition Height="100" />
        <RowDefinition Height="100" />
        <RowDefinition Height="100" />
    </Grid.RowDefinitions>

    <Border Grid.Column="0" Grid.Row="0" Background="Black" />
    <Border Grid.Column="2" Grid.Row="0" Background="Black" />
    <Border Grid.Column="1" Grid.Row="1" Background="Black" />
    <Border Grid.Column="3" Grid.Row="1" Background="Black" />
</Grid>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1966258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档