Как получить доступ / изменить элементы, созданные как часть ControlTemplate из XAML? - PullRequest
0 голосов
/ 16 марта 2012

Пролистал другие связанные вопросы, но я не увидел что-то, что ответило на этот явный вопрос.

(В моем случае я работаю над приложением Microsoft Surface, откуда берутся некоторые классы, которые я использую)

Итак, я хотел бы прикрепитьElementMenu, содержащий несколько фиксированных элементов для каждого ScatterViewItem в моем ScatterView, что я могу сделать следующим образом:

<ControlTemplate x:Key="MenuedSVITemplate" TargetType="{x:Type s:ScatterViewItem}">
  <Grid>
    <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
      <s:ElementMenu Name="Menu" HorizontalAlignment="Right" VerticalAlignment="Top" ActivationMode="AlwaysActive">
        <s:ElementMenuItem Name="MenuItemClose" Header="Close" Click="CloseItemClicked"/>
      </s:ElementMenu>
    </ContentPresenter>
  </Grid>
</ControlTemplate>

И позже я могу создать элементы ScatterViewItem, использующие этот шаблон:

<ScatterViewItem Name="SomeItem" Template="{StaticResource MenuedSVITemplate"/>

Но что, если я хочу добавить дополнительные пункты в меню, определенное в шаблоне?Есть ли способ сделать это в XAML?(Я знаю, что мог бы сделать это в коде сзади, используя Template.FindName для получения ElementMenu, понижения рейтинга и добавления пунктов моего меню программно.)

Заранее спасибо!

1 Ответ

0 голосов
/ 16 марта 2012

Честно говоря, я не ожидал, что это сработает, но это сработало. Проверьте, где находится ContentPresenter:

<Window.Resources>
  <ControlTemplate x:Key="MenuedSVITemplate"
                   TargetType="{x:Type Button}">
    <Grid>
      <Menu Name="Menu"
            HorizontalAlignment="Right"
            VerticalAlignment="Top">
        <MenuItem Name="MenuItemClose"
                  Header="Close"
                  Click="CloseItemClicked" />
        <ContentPresenter Content="{TemplateBinding Content}"
                          ContentTemplate="{TemplateBinding ContentTemplate}" />
      </Menu>
    </Grid>
  </ControlTemplate>
</Window.Resources>
<Grid>
  <Button Template="{StaticResource MenuedSVITemplate}">
    <MenuItem Name="MenuItemHello"
              Header="Hello" />
  </Button>
</Grid>
...