我正在尝试在WPF中创建一个用户控件来表示Go board,这实际上只是一些黑色线条网格,在某些交叉点上有点。
目前我正在使用网格控制来处理石头的放置,但其中一个难点是石头被放置在网格线的交叉点而不是它们之间,所以如果我想绘制线条,他们需要穿过网格单元的中心。
我还是WPF的新手,所以我不确定我应该如何接近这个;我应该在每次控件渲染时手动绘制线条(如果是,如何?),还是有更好的方法?
答案 0 :(得分:5)
您可以通过多种方式解决这个问题。
例如。一种方法是使用DrawingBrush填充Panel的背景。以下是一些DrawingBrush示例:
您很可能不必使用Grid。对于随机定位Canvas更适合。如果您不喜欢画笔,可以使用Geometries或Shapes绘制线条或其他图形。我不是指你DrawingVisuals,因为从一开始他们可能会稍微有点理解。
已更新:在CodeProject上发现了这篇文章:Draw a Boardgame in WPF。也许你会发现它很有用。
希望这有帮助,
干杯,安瓦卡。
答案 1 :(得分:2)
前一段时间我创建了一个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>
希望这有帮助
答案 2 :(得分:1)
可能有所帮助的随机想法:
不是真的详细如何 - 但这就是我如何解决问题
答案 3 :(得分:0)