【问题标题】:How to add one Button to multiple Canvasses?如何将一个按钮添加到多个画布?
【发布时间】:2012-01-06 14:01:00
【问题描述】:

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

|-----------------------------------------|
| 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 个画布,那么您可以使用成像 (VisualBrush) 在 2、3、4 中显示 1 个主画布的相同副本。

标签: .net wpf wpf-controls drawing


【解决方案1】:

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

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

【讨论】:

  • 我要同步四个画布。我不想创建新的画布内容。因为如果画布的数量如此之多,则必须创建新的数据是如此之大。能给我详细的说明吗?
  • 如果您担心创建的控件过多,您可能需要研究 UI 虚拟化。这样控件只会为当前可见的画布创建。
【解决方案2】:

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

像这样:

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

【讨论】:

    【解决方案3】:

    一个控件不能有多个父级,因此尝试将bt1 添加到canvas1canvas2canvas3 canvas4 永远不会奏效。 p>

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2017-01-28
        • 2021-04-17
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 2015-07-07
        相关资源
        最近更新 更多