Ответы пользователя по тегу Элементы питания
  • WPF. Создание элементов из кода

    kefirr
    @kefirr
    Все эти методы Add* — для других вещей, тебе они не нужны.
    Window — это ContentControl. У него есть св-во Content, в которое и устанавливается содержимое. Содержимое — это один объект. Будь то Grid, StackPanel, что угодно. Поэтому просто так добавить что-то, чтобы оно уже было у наследников — не получится.

    Проблема решается при помощи атрибута ContentProperty, который перенаправляет т.н. Direct Content (то, что задаётся в xaml) в указанную проперть.
    Короче говоря, вот рабочий код:

      [ContentProperty("Child")]
      public class BaseWindow : Window
      {
       #region Fields and Constants

       public static readonly DependencyProperty ChildProperty =
         DependencyProperty.Register("Child", typeof (object), typeof (BaseWindow), new UIPropertyMetadata(0));

       #endregion

       #region Constructors

       public BaseWindow()
       {
         var rootStackPanel = new StackPanel();
         rootStackPanel.Children.Add(new Button {Content = "I'm button from base class"});
         var childContentControl = new ContentControl {DataContext = this};
         childContentControl.SetBinding(ContentProperty, "Child");
         rootStackPanel.Children.Add(childContentControl);
         Content = rootStackPanel;
       }

       #endregion

       #region Public properties and indexers

       public object Child
       {
         get { return GetValue(ChildProperty); }
         set { SetValue(ChildProperty, value); }
       }

       #endregion
      }


    * This source code was highlighted with Source Code Highlighter.
    Ответ написан
    1 комментарий