繁体   English   中英

如何在WPF中绘制网格

[英]How to draw a grid in WPF

我正在尝试在WPF中创建一个用户控件来表示Go板 ,它基本上只是一些黑色线条网格,在某些交叉点上带点。

目前我正在使用网格控件来处理宝石的放置,但其中一个难点是石头被放置在网格线的交叉点而不是它们之间,所以如果我想绘制线条,他们需要穿过网格单元的中心。

我还是WPF的新手,所以我不确定我应该如何接近这个; 我应该在每次控件渲染时手动绘制线条(如果是,如何?),还是有更好的方法?

你可以通过多种方式解决这个问题。

例如。 一种方法是使用DrawingBrush填充Panel的背景。 以下是一些DrawingBrush示例:

替代文字
(来源: microsoft.com

很可能你不必使用Grid。 随机定位Canvas适合更好。 如果您不喜欢画笔,可以使用几何图形形状来绘制线条或其他图形。 我不是指你在DrawingVisuals,因为从一开始他们的理解可能会稍微强一些。

更新 :在CodeProject上找到这篇文章: 在WPF中绘制一个Boardgame 也许你会发现它很有用。

希望这可以帮助,

干杯,安瓦卡。

前一段时间我创建了一个checkmate板,我创建了一个ItemsControl,其中每个元素也是ItemsControl,带有小矩形模板。 这是我的代码

<UserControl x:Class="Checker.Controls.Board"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:models="clr-namespace:Checker.Models"
    xmlns:usercontrols="clr-namespace:Checker.Controls"
    xmlns:converters="clr-namespace:Checker.Converters">
    <UserControl.Resources>
        <models:BoardModel x:Key="boardModel"/>
        <converters:BoolToBorderColorConverter x:Key="boolToBorderColorConverter"/>
        <DataTemplate DataType="{x:Type models:Figure}">
            <usercontrols:FigureControl/>
        </DataTemplate>
    </UserControl.Resources>
    <Border>
        <ItemsControl ItemsSource="{Binding Source={StaticResource boardModel}, Path=BoardItems}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding}" MouseDown="ItemsControl_MouseDown">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel Orientation="Horizontal"/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Border Background="{Binding Path='IsFirstColor', Converter={StaticResource boolToBorderColorConverter}}" BorderBrush="Black" BorderThickness="1" Width="50" Height="50" MouseDown="ItemsControl_MouseDown">
                                    <ContentPresenter Content="{Binding FigureOnBoard}">

                                    </ContentPresenter>
                                </Border>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Border>
</UserControl>

希望这可以帮助

随机的想法可能有所帮助:

  1. 使用网格 - 它在那里,它应该很好地定位的东西
  2. 网格“单元格”内容基本上是一个三态的东西,网格线上没有任何东西,网格线上面有一块白色的石头,网格线上面有一块黑色的石头 - 这应该是一个可重复使用的WPF标记 - 可能一个用户控件,可能是别的东西(我对WPF来说还是太新了)。 我很想把它绑定到你的数据上。
  3. 您可以将行为附加到单元格内容以获取其单击时以及其他内容

不是真的详细的如何 - 但这就是我如何解决问题

我刚在博客中添加了这篇文章:

编辑:将文件移动到我的谷歌驱动器

我认为它会对你有所帮助, 这是你得到的结果。 您也可以在那里下载projet。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM