XAML如何设置只读CLR属性?

时间:2010-04-12 23:39:10

标签: wpf xaml windows-phone-7

我正在尝试在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属性没有set访问器,并且定义如下:

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

为什么在XAML而不是C#中可以做到这一点?是否有使用此语法构造对象的特殊方法?

更重要的是,如何在代码中重新创建它?

3 个答案:

答案 0 :(得分:4)

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

直接添加到Buttons媒体资源。

答案 1 :(得分:2)

它可能使用Buttons.Add而不是分配给Buttons属性。

答案 2 :(得分:1)

ApplicationBar.Buttons成员具有添加功能(请参阅this

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

appBar.Buttons.Add(appBarButton);