0

グラフィックを含むクラスをグリッドのクラスに追加するにはどうすればよいですか? 現在、 CreateGraphicsにエラーがあります。

using System.Windows;
using System.Windows.Controls;

namespace Othello
{
class Board : Grid
{
    public Grid grid = new Grid();
    ColumnDefinition col;
    RowDefinition row;

    int boxesAmount = 8;
    int boxSize = 100;
    int i = 0;

    public Board()
    {
        grid.Width = boxSize * boxesAmount;
        grid.Height = boxSize * boxesAmount;
        grid.HorizontalAlignment = HorizontalAlignment.Left;
        grid.VerticalAlignment = VerticalAlignment.Top;
        grid.ShowGridLines = true;
        grid.Background = System.Windows.Media.Brushes.Green;

        for (i = 0; i < boxesAmount; i++)
        {
            // Create Columns
            col = new ColumnDefinition();
            grid.ColumnDefinitions.Add(col);

            // Create Rows
            row = new RowDefinition();
            grid.RowDefinitions.Add(row);
        }
        //Console.WriteLine(grid));
        this.Children.Add(grid);

        Chess chess = new Chess();
        grid.Children.Add(chess);
        Grid.SetColumn(chess, 0);
        Grid.SetRow(chess, 0);
    }
}
}

グラフィックを含む 2 番目のクラス

using System;
using System.Drawing;
using System.Windows.Controls;

namespace Othello
{

    class Chess : UserControl
    {
        Graphics g;

        public Chess()
        {
            Console.WriteLine("load chess");

            g = this.CreateGraphics();
            g.DrawEllipse(Pens.Black, 30, 30, 50, 50);
            this.AddChild(g);
        }
    }
}

エラー:

error CS1061: 'Othello.Chess' does not contain a definition for 'CreateGraphics' and no extension method 'CreateGraphics' accepting a first argument of type 'Othello.Chess' could be found (are you missing a using directive or an assembly reference?)
4

1 に答える 1

2

クラスUserControlまたはその基本クラスには、コンパイラ エラーが示すとおり、メソッドが含まれていません。Code を書いているときにメソッドが Intellisense に表示されない場合にも、そのようなことに気付くことができます。それを入力すると、おそらくすぐに赤い波線が表示されます。

CreateGraphicsWindows フォームです。しかし、あなたはWPFを使用しています。これら 2 つは、異なるクラス (異なるメソッドを持つ) を持つ異なる UI フレームワークです。誤って WPF カスタム コントロール ライブラリを作成しましたが、Windows フォーム コントロール ライブラリを作成したかったのですか?

コントロールの XAML ファイルで次のようなことを試してください。

<UserControl x:Class="WpfApplication2.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Ellipse Stroke="Black" Margin="30"></Ellipse>
    </Grid>
</UserControl>

または、オーバーライドOnRenderしてカスタム ペインティングを提供することもできます。

于 2012-05-31T06:56:02.567 に答える