0

キャンバス コントロールから継承し、次のようなカスタム キャンバス クラスを作成します。

public class MyCanvas:Canvas
{
    //this list will contains all shape
    VisualCollection graphicsList;
    List<GraphicsBase> cloneGraphicsList;
    int c = 0;
    double deltaX = 0;
    double deltaY = 0;
    public MyCanvas()
        :base()
    {
        graphicsList = new VisualCollection(this);
        cloneGraphicsList = new List<GraphicsBase>();
    }

   public VisualCollection GraphicsList
    {
        get
        {
            return graphicsList;
        }
        set
        {
            graphicsList = value;
        }
    }

    protected override int VisualChildrenCount
    {
        get
        {
            return graphicsList.Count;
        }
    }

    protected override Visual GetVisualChild(int index)
    {
        if (index < 0 || index >= graphicsList.Count)
        {
            throw new ArgumentOutOfRangeException("index");
        }
        return graphicsList[index];
    }
    public GraphicsBase this[int index]
    {
        get
        {
            if (index >= 0 && index < GraphicsList.Count)
            {
                return (GraphicsBase)GraphicsList[index];
            }
            return null;
        }
    }

    public int Count
    {
        get
        {
            return GraphicsList.Count;
        }
    }
 }

XAML では次のコードを使用します。

<Window x:Class="MyNameSpace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:CustomCanvas="clr-namespace:MyNameSpace"
xmlns:WPFRuler="clr-namespace:Orbifold.WPFRuler;assembly=Orbifold.WPFRuler"
Title="PrintVarsDesigner" Height="709" Width="964"
Background="LightGray" Grid.IsSharedSizeScope="False" OverridesDefaultStyle="False" 
WindowState="Maximized" WindowStartupLocation="CenterScreen">
  <CustomCanvas:MyCanvas x:Name="myCanvas" Background="White" VerticalAlignment="Top" 
      Width="895" Height="1162">
  </CustomCanvas:MyCanvas>
</Window>

子をキャンバスに追加してビジュアル画面または C# コードから追加した後、コントロールは表示されません。

アドバイスをありがとう。

4

1 に答える 1