如何从XAML中访问/修改作为ControlTemplate一部分创建的元素
本文关键字:ControlTemplate 一部分 创建 元素 修改 XAML 访问 | 更新日期: 2023-09-27 18:28:14
浏览了其他相关问题,但我没有看到能回答这个明确问题的内容。
(就我而言,我正在开发一个Microsoft Surface应用程序,我使用的许多类都来自该应用程序)
因此,我想在我的ScatterView中的每个ScatterViewItem上附加一个包含一些固定项目的ElementMenu,我可以这样做:
<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,向下转换,并以编程方式添加我的菜单项,从而在代码背后完成这项工作。)
提前感谢!
坦率地说,我没想到这会奏效,但它确实奏效了。检查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>