如何为多个Canvasses添加一个Button?

时间:2012-01-06 14:01:01

标签: .net wpf wpf-controls drawing

我想用如下所示的屏幕创建一个应用程序。

|-----------------------------------------|
| MainWindow                     [-][=][x]|
|-----------------------------------------|
|                     |                   |
|   (Button1)         |     (Button1)     |
|                     |                   |
|                    1|                  2|
|-----------------------------------------|
|                     |                   |
|   (Button1)         |     (Button1)     |
|                     |                   |
|                    3|                  4|
|-----------------------------------------|

Legend: It a window form has four canvas (are 1,2,3,4) added to grid.

以下是我的代码。我使用.Net 3.0,但窗口无法正确显示。 Button1仅在canvas1上显示。 请帮我解决此问题。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Button bt1 = new Button() 
        { Content = "Button1", Width = 100, Height = 50 };

        // Add button1 to four DrawingCanvas.
        canvas1.Add(bt1);
        canvas2.Add(bt1);
        canvas3.Add(bt1);
        canvas4.Add(bt1);
    }
}

public class DrawIngCanvas : Canvas
{
    public void Add(UIElement data)
    {
        DrawIngCanvas cv = LogicalTreeHelper.GetParent(data) as DrawIngCanvas;
        if (cv != null)
        {
            cv.RemoveLogicalChild(data);
            cv.RemoveVisualChild(data);
        }
        base.Children.Add(data);
    }
}

4 个答案:

答案 0 :(得分:2)

每个Visual可能只有一个VisualParent。因此,该按钮无法添加到多个画布。每个画布都需要一个单独的Button实例。

如果您希望每个按钮的行为相同,请考虑使用Style

答案 1 :(得分:1)

您无法在四个不同的地方显示一个按钮,需要四个按钮。

像这样:

canvas1.Add(new Button{ Content = "Button1", Width = 100, Height = 50 });
canvas2.Add(new Button{ Content = "Button1", Width = 100, Height = 50 });
canvas3.Add(new Button{ Content = "Button1", Width = 100, Height = 50 });
canvas4.Add(new Button{ Content = "Button1", Width = 100, Height = 50 });

答案 2 :(得分:0)

您不能拥有一个控件的多个父级,因此尝试将bt1添加到canvas1canvas2canvas3 {{1永远不会起作用。

相反,如果要模拟四个canvas4控件中的相同按钮,则需要创建具有相同属性值的四个Canvas对象(例如Button和{{ 1}}),然后分别将它们添加到Content控件。

答案 3 :(得分:0)

您可以使用Clone()函数进行精确复制