【问题标题】:How to access/modify elements created as part of a ControlTemplate from within XAML?如何从 XAML 中访问/修改作为 ControlTemplate 的一部分创建的元素?
【发布时间】:2012-03-16 15:42:49
【问题描述】:

浏览了其他相关问题,但我没有看到可以回答这个明确问题的内容。

(在我的例子中,我正在开发一个 Microsoft Surface 应用程序,这是我使用的许多类的来源)

所以,我想将一个包含一些固定项目的 ElementMenu 附加到我的 ScatterView 中的每个 ScatterViewItem,我可以这样做:

<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>

然后我可以稍后使用此模板创建 ScatterViewItems:

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

但是,如果我想在模板中定义的菜单中添加其他项目怎么办?有没有办法在 XAML 中做到这一点? (我知道我可以在代码隐藏中使用 Template.FindName 来获取 ElementMenu、向下转换并以编程方式添加我的菜单项。)

提前致谢!

【问题讨论】:

    标签: c# wpf templates styles pixelsense


    【解决方案1】:

    坦率地说,我没想到这会奏效,但它确实奏效了。检查 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>
    

    【讨论】:

    • 好的,这很有趣 - 但是如果我还希望能够指定模板项的内容呢?例如如果您的按钮是网格,并且我希望能够同时指定网格的内容和附加菜单?您能否以某种方式让第二个 ContentPresenter 显示不同的内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2023-04-07
    相关资源
    最近更新 更多