Как добавить одну кнопку на несколько полотен? - PullRequest
1 голос
/ 06 января 2012

Я хочу создать приложение с экраном, изображенным ниже.

|-----------------------------------------|
| 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 ]

2 голосов
/ 06 января 2012

Каждый Visual может иметь только один VisualParent.Из-за этого кнопку нельзя добавить к нескольким полотнам.Вам понадобится отдельный экземпляр Button для каждого холста.

Если вы хотите, чтобы кнопки работали одинаково, рассмотрите возможность использования Style.

1 голос
/ 06 января 2012

Вы не можете отобразить одну кнопку в четырех разных местах, вам нужно четыре кнопки.

вроде так:

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 });
0 голосов
/ 06 января 2012

Вы можете использовать функцию Clone (), чтобы сделать точную копию

0 голосов
/ 06 января 2012

Вы не можете иметь несколько родителей одного элемента управления, поэтому попытка добавить bt1 к canvas1, canvas2, canvas3 и canvas4 никогда не сработает.

Вместо этого, если вы хотите смоделировать наличие одной и той же кнопки в четырех элементах управления Canvas, вам необходимо создать четыре объекта Button с одинаковыми значениями свойств (например, Content и Width), а затем добавить их. на Canvas управления соответственно.

...