2012-01-06 76 views
1

我想用下面描述的屏​​幕創建應用程序。如何將一個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

回答

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

每個Visual可能只有一個VisualParent。因此,該按鈕無法添加到多個畫布。您需要爲每個畫布單獨設置一個Button實例。

如果您希望各個按鈕的作用相同,請考慮使用Style

+0

我想同步四個畫布。我不想創建新的畫布內容。因爲如果畫布的數量這麼多,數據就會造成新的這麼大。你能給我詳細的指導嗎? – user1134309 2012-01-06 15:00:57

+1

如果您擔心創建的控件太多,您可能需要考慮UI虛擬化。所以只能爲當前可見的畫布創建控件。 – Lukazoid 2012-01-06 15:12:06

0

你不能有一個控制的多個父母,所以嘗試添加bt1canvas1canvas2canvas3canvas4是從來沒有去上班。

相反,如果要模擬有四個Canvas控制相同的按鈕,你需要創建具有相同的屬性值(如ContentWidth)四個Button對象,然後將它們分別添加到Canvas控制。

0

您可以使用Clone()函數TA做出精確副本

相關問題