Как XAML устанавливает свойства CLR только для чтения? - PullRequest
3 голосов
/ 13 апреля 2010

Я пытаюсь создать панель приложения в коде для WinPhone7. XAML, который делает это, выглядит так:

<PhoneApplicationPage.ApplicationBar>
    <shellns:ApplicationBar Visible="True" IsMenuEnabled="True">
        <shellns:ApplicationBar.Buttons>
            <shellns:ApplicationBarIconButton IconUri="/images/appbar.feature.search.rest.png" />
        </shellns:ApplicationBar.Buttons>
    </shellns:ApplicationBar>
</PhoneApplicationPage.ApplicationBar>

Так что я подумал, что просто перепишу это на C #:

var appbar = new ApplicationBar();
var buttons = new List<ApplicationBarIconButton>();
buttons.Add(new ApplicationBarIconButton(new Uri("image.png", UrlKind.Relative));
appbar.Buttons = buttons; //error CS0200: Property or indexer 'Microsoft.Phone.Shell.ApplicationBar.Buttons' cannot be assigned to -- it is read only

Единственная проблема заключается в том, что свойство Buttons не имеет установленного метода доступа и определяется следующим образом:

public sealed class ApplicationBar {
  //...Rest of the ApplicationBar class from metadata
  public IList Buttons { get; }
}

Почему это можно сделать в XAML, а не в C #? Есть ли особый способ создания объектов с использованием этого синтаксиса?

Что более важно, как я могу воссоздать это в коде?

Ответы [ 3 ]

4 голосов
/ 13 апреля 2010

appbar.Buttons.Add(new ApplicationBarIconButton(new Uri("image.png", UrlKind.Relative));

Добавить непосредственно к свойству Buttons.

2 голосов
/ 13 апреля 2010

Вероятно, вместо присвоения свойству Buttons используется Buttons.Add.

1 голос
/ 13 апреля 2010

Элемент ApplicationBar.Buttons имеет функцию добавления (см. this )

var appBarButton = 
           new ApplicationBarIconButton(new Uri("image.png", UrlKind.Relative)

appBar.Buttons.Add(appBarButton);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...