如何将一个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);
}
}
你不能在四个不同的地方显示一个按钮,你需要四个按钮。
像这样:
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
。
我想同步四个画布。我不想创建新的画布内容。因为如果画布的数量这么多,数据就会造成新的这么大。你能给我详细的指导吗? – user1134309 2012-01-06 15:00:57
如果您担心创建的控件太多,您可能需要考虑UI虚拟化。所以只能为当前可见的画布创建控件。 – Lukazoid 2012-01-06 15:12:06
你不能有一个控制的多个父母,所以尝试添加bt1
到canvas1
,canvas2
,canvas3
和canvas4
是从来没有去上班。
相反,如果要模拟有四个Canvas
控制相同的按钮,你需要创建具有相同的属性值(如Content
和Width
)四个Button
对象,然后将它们分别添加到Canvas
控制。
您可以使用Clone()函数TA做出精确副本
你有没有考虑包装的按钮和帆布成复合控制? – 2012-01-07 03:22:31
如果你不需要太多的控件,并且想要同步所有4画布,那么你可以使用成像('VisualBrush')在2,3,4中显示1个主画布的相同副本。 – Code0987 2012-01-07 10:33:25