Как добавить поведение в ApplicationBarIconButton в C #? - PullRequest
2 голосов
/ 15 апреля 2011

Я пытаюсь добавить элементы в панель приложения с помощью поведения.

В xaml они выглядят так:

<phone:PhoneApplicationPage.ApplicationBar>
  <shell:ApplicationBar IsVisible="True"
                          IsMenuEnabled="True">
      <shell:ApplicationBarIconButton x:Name="Save" 
                                      IconUri="/resources/icons/appbar.check.rest.png"
                                      Text="Save"  />
      <shell:ApplicationBarIconButton x:Name="Cancel"
                                      IconUri="/resources/icons/appbar.cancel.rest.png"
                                      Text="Cancel"  />
  </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

<i:Interaction.Behaviors>
  <Behaviors:ApplicationBarIconButtonCommand TextKey="Save" 
                                             CommandBinding="{Binding SaveEventSetupCommand}" />
  <Behaviors:ApplicationBarIconButtonCommand TextKey="Cancel" 
                                             CommandBinding="{Binding CancelEventSetupCommand}" />
</i:Interaction.Behaviors>

Для поддержки нескольких языков мне нужно добавить что-то вроде:

Text="{Binding Path=Localizedresources.lblCourse, Source={StaticResource LocalizedStrings}}"

к каждой кнопке. Похоже, что это не может быть сделано в xaml, следовательно, использование кода.

Кнопка добавлена ​​в этот код:

ApplicationBarIconButton appBarSaveButton = new ApplicationBarIconButton(
            new Uri("/resources/icons/appbar.check.rest.png", UriKind.Relative)) 
            { Text = "Test" };

ApplicationBar.Buttons.Add(appBarSaveButton);

Я просто не могу понять, как добавить поведение. Это моя отправная точка:

WP7Contrib.View.Controls.Behaviors.ApplicationBarIconButtonCommand 
            ibc = new WP7Contrib.View.Controls.Behaviors.ApplicationBarIconButtonCommand 
{ TextKey = "Test" };

По сути, я ищу рабочий образец, если кто-нибудь может ему помочь.

Спасибо

Ответы [ 3 ]

1 голос
/ 17 апреля 2011

Исходя из ответа Мэтта, это моё решение:

Добавьте это вверху страницы xaml:

xmlns:Preview="clr-namespace:Phone7.Fx.Preview;assembly=Phone7.Fx.Preview"

и это внутри сетки внизу:

    <Preview:BindableApplicationBar x:Name="AppBar" BarOpacity="1.0" IsVisible="{Binding IsBarVisible}" >
        <Preview:BindableApplicationBarIconButton 
            Command="{Binding SaveCommand}"
            Text="{Binding Path=Localizedresources.lblSave, Source={StaticResource LocalizedStrings}}" 
            IconUri="/resources/icons/appbar.check.rest.png" />
        <Preview:BindableApplicationBarIconButton 
            Command="{Binding CancelCommand}"
            Text="{Binding Path=Localizedresources.lblCancel, Source={StaticResource LocalizedStrings}}" 
            IconUri="/resources/icons/appbar.cancel.rest.png" />
    </Preview:BindableApplicationBar>

Справочные материалы:
http://blog.humann.info/post/2010/08/27/How-to-have-binding-on-the-ApplicationBar.aspx

http://www.codeproject.com/KB/windows-phone-7/CommandToAppBarWP7.aspx?display=Mobile

0 голосов
/ 15 апреля 2011

Определенно можно сделать привязываемый ApplicationBar, используя оболочку из http://blog.humann.info/post/2010/08/27/How-to-have-binding-on-the-ApplicationBar.aspx

Не уверен насчет добавления команд, но это должно быть возможно с той же техникой.

0 голосов
/ 15 апреля 2011

Нельзя указать свойство Text для ApplicationBarIconButton для ресурса в XAML, который вы уже разработали. Чтобы создать поведение и прикрепить его в коде, вы используете код, подобный следующему (измененный из приложения, над которым я сейчас работаю):

((ApplicationBarIconButton)this.ApplicationBar.Buttons[0].Text = Strings.NewContact;
var newBehavior = new ApplicationBarButtonNavigation
{
    ButtonText = Strings.NewContact,
    NavigateTo = new Uri("/views/ContactView.xaml", UriKind.RelativeOrAbsolute),
};
Interaction.GetBehaviors(this).Add(newBehavior);

Принцип для вашего сценария такой же: создайте поведение, а затем используйте Interaction.GetBehaviors(this).Add(yourBehavior);

ПРИМЕЧАНИЕ: В приведенных выше примерах это относится к выделенному коду для представления и отсутствует в модели представления.

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