如何将一个Button添加到多个Canvasses?

问题描述:

我想用下面描述的屏​​幕创建应用程序。如何将一个Button添加到多个Canvasses?

|-----------------------------------------| 
| 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); 
    } 
} 
+0

你有没有考虑包装的按钮和帆布成复合控制? – 2012-01-07 03:22:31

+0

如果你不需要太多的控件,并且想要同步所有4画布,那么你可以使用成像('VisualBrush')在2,3,4中显示1个主画布的相同副本。 – Code0987 2012-01-07 10:33:25

你不能在四个不同的地方显示一个按钮,你需要四个按钮。

像这样:

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 }); 

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

如果您希望各个按钮的作用相同,请考虑使用Style

+0

我想同步四个画布。我不想创建新的画布内容。因为如果画布的数量这么多,数据就会造成新的这么大。你能给我详细的指导吗? – user1134309 2012-01-06 15:00:57

+1

如果您担心创建的控件太多,您可能需要考虑UI虚拟化。所以只能为当前可见的画布创建控件。 – Lukazoid 2012-01-06 15:12:06

你不能有一个控制的多个父母,所以尝试添加bt1canvas1canvas2canvas3canvas4是从来没有去上班。

相反,如果要模拟有四个Canvas控制相同的按钮,你需要创建具有相同的属性值(如ContentWidth)四个Button对象,然后将它们分别添加到Canvas控制。

您可以使用Clone()函数TA做出精确副本