none
Command - Canvas.Children.Add RRS feed

  • Вопрос

  • Здравствуйте.

    На основной форме динамически создаются разные контролы.

    Есть команда - AddControl. Есть метод на основной форме:

      public void AddLayoutRoot(UIElement element, double x, double y)
            {
                Canvas.SetLeft(element, x);
                Canvas.SetTop(element, y);
                TwoRoot.Children.Add(element);
                TwoRoot.UpdateLayout();
                Canvas.SetZIndex(element, 3);
            }

    В другом контоле я объявляю эту команду

    <UserControl.CommandBindings>
            <CommandBinding Command="Commands:CanvasAddCommands.AddControl"
                Executed="
    AddControl_Executed"
                CanExecute="
    AddControl_CanExecute"/>
        </UserControl.CommandBindings>

     <Hyperlink Command="Commands:CanvasAddCommands.AddControl" CommandParameter="{Binding ElementName=ClubInfo, Path=IndexClub}" >

       <TextBlock FontSize="18" Foreground="Black" FontFamily="Latha" VerticalAlignment="Center"
                                                   HorizontalAlignment="Center" Text="{Binding ElementName=ClubInfo, Path=IndexClub}"/>
      </Hyperlink>
       и через этот метод:

     private void AddControl_Executed(object target, ExecutedRoutedEventArgs e)
     {

    Main  main = new Main();
                Travel travel = new Travel();

                main.AddLayoutRoot(travel, 200, 100);}

    Этот метод по идее должен добавить на основную форму третий элемент Travel() с координатами "200" и "100".

    Ни чего не происходит. Дерево вроде обновил, хотя давно не работал с Canvas, могу что-то напутать. Можно через RelayCommand обвернуть метод AddLayoutRoot, но, как мне кажется, это ни чего не изменит. Может есть какие-то другие методы решения этой проблемы? Подскажите, пожалуйста.

    17 ноября 2011 г. 22:59

Ответы

  • //Создается новый экземпляр Main
    Main  main = new Main();
    Travel travel = new Travel();
    //Добавляется на новый экземпляр, а не на основное окно
    main.AddLayoutRoot(travel, 200, 100);}

    По-моему, ты не в основное окно контрол Travel выводишь.
    • Предложено в качестве ответа SANOyan 18 ноября 2011 г. 5:29
    • Помечено в качестве ответа Serdceder 18 ноября 2011 г. 9:00
    18 ноября 2011 г. 4:04
    Модератор

Все ответы

  • //Создается новый экземпляр Main
    Main  main = new Main();
    Travel travel = new Travel();
    //Добавляется на новый экземпляр, а не на основное окно
    main.AddLayoutRoot(travel, 200, 100);}

    По-моему, ты не в основное окно контрол Travel выводишь.
    • Предложено в качестве ответа SANOyan 18 ноября 2011 г. 5:29
    • Помечено в качестве ответа Serdceder 18 ноября 2011 г. 9:00
    18 ноября 2011 г. 4:04
    Модератор
  • Да, понял уже) Спасибо. Бывает.
    18 ноября 2011 г. 9:00