带网格/覆盖层的C#面板

带网格/覆盖层的C#面板,c#,math,grid,overlay,C#,Math,Grid,Overlay,您好,我想为c#中的一个小游戏实现一个控件,用户可以单击面板并绘制一条穿过迷宫的路径。之后,我想传输路径上某个地方交叉的每个“点”的坐标 为了做到这一点,我尝试实现某种网格,其中每一块都有相同的大小。然后我想创建一种覆盖,这样用户可以点击网格,然后网格变成绿色,显示用户选择的方式 我在下面举了一个小例子,希望能解释我的意思: 我的问题是我对面板和图形不是特别熟练,希望这里的人能有一些资料或教程来完成我想做的事情 提前谢谢 很久以前,我用原语中的Togglebutton制作了这样的东西: Sys

您好,我想为c#中的一个小游戏实现一个控件,用户可以单击面板并绘制一条穿过迷宫的路径。之后,我想传输路径上某个地方交叉的每个“点”的坐标

为了做到这一点,我尝试实现某种网格,其中每一块都有相同的大小。然后我想创建一种覆盖,这样用户可以点击网格,然后网格变成绿色,显示用户选择的方式

我在下面举了一个小例子,希望能解释我的意思:

我的问题是我对面板和图形不是特别熟练,希望这里的人能有一些资料或教程来完成我想做的事情


提前谢谢

很久以前,我用原语中的Togglebutton制作了这样的东西:

System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton()

仅使用网格创建WPF解决方案

  • Xaml文件:

  • Cs文件:

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
        InitializeComponent();
        fillWithToggles();
    }
    
    public void fillWithToggles()
    {
        for (int i = 0; i < 10; i++)
        {
            ColumnDefinition gridCol = new ColumnDefinition();
            gridCol.Name = "Column" + i.ToString();
            DynamicGrid.ColumnDefinitions.Add(gridCol);
        }
    
        for (int i = 0; i < 10; i++)
        {
            RowDefinition gridRow = new RowDefinition();
            gridRow.Name = "Row" + i.ToString();
            DynamicGrid.RowDefinitions.Add(gridRow);
        }
    
        for (int x = 0; x < 10; x++)
        {
            for (int y = 0; y < 10; y++)
            {
                System.Windows.Controls.Primitives.ToggleButton tb = new ToggleButton();
                tb.VerticalAlignment = VerticalAlignment.Stretch;
                tb.HorizontalAlignment = HorizontalAlignment.Stretch;
                Grid.SetColumn(tb, x);
                Grid.SetRow(tb,y);
                DynamicGrid.Children.Add(tb);
            }                
        }
    }}
    
    公共部分类主窗口:窗口
    {
    公共主窗口()
    {
    初始化组件();
    fillWithToggles();
    }
    公共空白fillWithToggles()
    {
    对于(int i=0;i<10;i++)
    {
    ColumnDefinition gridCol=新ColumnDefinition();
    gridCol.Name=“Column”+i.ToString();
    DynamicGrid.ColumnDefinitions.Add(gridCol);
    }
    对于(int i=0;i<10;i++)
    {
    RowDefinition gridRow=新的RowDefinition();
    gridRow.Name=“Row”+i.ToString();
    DynamicGrid.RowDefinitions.Add(gridRow);
    }
    对于(int x=0;x<10;x++)
    {
    对于(int y=0;y<10;y++)
    {
    System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton();
    tb.VerticalAlignment=VerticalAlignment.Stretch;
    tb.HorizontalAlignment=HorizontalAlignment.Stretch;
    Grid.SetColumn(tb,x);
    网格设置行(tb,y);
    DynamicGrid.Children.Add(tb);
    }                
    }
    }}
    
结果:


稍后,您可以玩边框和整个逻辑等。

很久以前,我使用原语中的Togglebutton制作了如下内容:

System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton()

仅使用网格创建WPF解决方案

  • Xaml文件:

  • Cs文件:

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
        InitializeComponent();
        fillWithToggles();
    }
    
    public void fillWithToggles()
    {
        for (int i = 0; i < 10; i++)
        {
            ColumnDefinition gridCol = new ColumnDefinition();
            gridCol.Name = "Column" + i.ToString();
            DynamicGrid.ColumnDefinitions.Add(gridCol);
        }
    
        for (int i = 0; i < 10; i++)
        {
            RowDefinition gridRow = new RowDefinition();
            gridRow.Name = "Row" + i.ToString();
            DynamicGrid.RowDefinitions.Add(gridRow);
        }
    
        for (int x = 0; x < 10; x++)
        {
            for (int y = 0; y < 10; y++)
            {
                System.Windows.Controls.Primitives.ToggleButton tb = new ToggleButton();
                tb.VerticalAlignment = VerticalAlignment.Stretch;
                tb.HorizontalAlignment = HorizontalAlignment.Stretch;
                Grid.SetColumn(tb, x);
                Grid.SetRow(tb,y);
                DynamicGrid.Children.Add(tb);
            }                
        }
    }}
    
    公共部分类主窗口:窗口
    {
    公共主窗口()
    {
    初始化组件();
    fillWithToggles();
    }
    公共空白fillWithToggles()
    {
    对于(int i=0;i<10;i++)
    {
    ColumnDefinition gridCol=新ColumnDefinition();
    gridCol.Name=“Column”+i.ToString();
    DynamicGrid.ColumnDefinitions.Add(gridCol);
    }
    对于(int i=0;i<10;i++)
    {
    RowDefinition gridRow=新的RowDefinition();
    gridRow.Name=“Row”+i.ToString();
    DynamicGrid.RowDefinitions.Add(gridRow);
    }
    对于(int x=0;x<10;x++)
    {
    对于(int y=0;y<10;y++)
    {
    System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton();
    tb.VerticalAlignment=VerticalAlignment.Stretch;
    tb.HorizontalAlignment=HorizontalAlignment.Stretch;
    Grid.SetColumn(tb,x);
    网格设置行(tb,y);
    DynamicGrid.Children.Add(tb);
    }                
    }
    }}
    
结果:


稍后,您可以玩边框和整个逻辑等。

很久以前,我使用原语中的Togglebutton制作了如下内容:

System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton()

仅使用网格创建WPF解决方案

  • Xaml文件:

  • Cs文件:

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
        InitializeComponent();
        fillWithToggles();
    }
    
    public void fillWithToggles()
    {
        for (int i = 0; i < 10; i++)
        {
            ColumnDefinition gridCol = new ColumnDefinition();
            gridCol.Name = "Column" + i.ToString();
            DynamicGrid.ColumnDefinitions.Add(gridCol);
        }
    
        for (int i = 0; i < 10; i++)
        {
            RowDefinition gridRow = new RowDefinition();
            gridRow.Name = "Row" + i.ToString();
            DynamicGrid.RowDefinitions.Add(gridRow);
        }
    
        for (int x = 0; x < 10; x++)
        {
            for (int y = 0; y < 10; y++)
            {
                System.Windows.Controls.Primitives.ToggleButton tb = new ToggleButton();
                tb.VerticalAlignment = VerticalAlignment.Stretch;
                tb.HorizontalAlignment = HorizontalAlignment.Stretch;
                Grid.SetColumn(tb, x);
                Grid.SetRow(tb,y);
                DynamicGrid.Children.Add(tb);
            }                
        }
    }}
    
    公共部分类主窗口:窗口
    {
    公共主窗口()
    {
    初始化组件();
    fillWithToggles();
    }
    公共空白fillWithToggles()
    {
    对于(int i=0;i<10;i++)
    {
    ColumnDefinition gridCol=新ColumnDefinition();
    gridCol.Name=“Column”+i.ToString();
    DynamicGrid.ColumnDefinitions.Add(gridCol);
    }
    对于(int i=0;i<10;i++)
    {
    RowDefinition gridRow=新的RowDefinition();
    gridRow.Name=“Row”+i.ToString();
    DynamicGrid.RowDefinitions.Add(gridRow);
    }
    对于(int x=0;x<10;x++)
    {
    对于(int y=0;y<10;y++)
    {
    System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton();
    tb.VerticalAlignment=VerticalAlignment.Stretch;
    tb.HorizontalAlignment=HorizontalAlignment.Stretch;
    Grid.SetColumn(tb,x);
    网格设置行(tb,y);
    DynamicGrid.Children.Add(tb);
    }                
    }
    }}
    
结果:


稍后,您可以玩边框和整个逻辑等。

很久以前,我使用原语中的Togglebutton制作了如下内容:

System.Windows.Controls.Primitives.ToggleButton tb=新建ToggleButton()

仅使用网格创建WPF解决方案

  • Xaml文件:

  • Cs文件:

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
        InitializeComponent();
        fillWithToggles();
    }
    
    public void fillWithToggles()
    {
        for (int i = 0; i < 10; i++)
        {
            ColumnDefinition gridCol = new ColumnDefinition();
            gridCol.Name = "Column" + i.ToString();
            DynamicGrid.ColumnDefinitions.Add(gridCol);
        }
    
        for (int i = 0; i < 10; i++)
        {
            RowDefinition gridRow = new RowDefinition();
            gridRow.Name = "Row" + i.ToString();
            DynamicGrid.RowDefinitions.Add(gridRow);
        }
    
        for (int x = 0; x < 10; x++)
        {
            for (int y = 0; y < 10; y++)
            {
                System.Windows.Controls.Primitives.ToggleButton tb = new ToggleButton();
                tb.VerticalAlignment = VerticalAlignment.Stretch;
                tb.HorizontalAlignment = HorizontalAlignment.Stretch;
                Grid.SetColumn(tb, x);
                Grid.SetRow(tb,y);
                DynamicGrid.Children.Add(tb);
            }                
        }
    }}
    
    公共部分类主窗口:窗口
    {
    公共主窗口()
    {
    初始化组件();
    fillWithToggles();
    }
    公共空白fillWithToggles()
    {
    对于(int i=0;i<10;i++)
    {
    ColumnDefinition gridCol=新ColumnDefinition();
    gridCol.Name=“Column”+i.ToString();
    DynamicGrid.ColumnDefinitions.Add(gridCol);
    }
    对于(int i=0;i<10;i++)
    {
    RowDefinition gridRow=新的RowDefinition();
    gridRow.Name=“Row”+i.ToString();
    DynamicGrid.RowDefinitions.Add(gridRow);
    }
    对于(int x=0;x<