C# 如何从XAML中访问/修改作为ControlTemplate一部分创建的元素?
浏览了其他相关的问题,但我没有看到什么东西能回答这个明确的问题 (在我的例子中,我正在使用一个Microsoft Surface应用程序,我使用的许多类都来自该应用程序) 因此,我想将包含几个固定项的ElementMenu附加到我的ScatterView中的每个ScatterViewItem,我可以这样做:C# 如何从XAML中访问/修改作为ControlTemplate一部分创建的元素?,c#,wpf,templates,styles,pixelsense,C#,Wpf,Templates,Styles,Pixelsense,浏览了其他相关的问题,但我没有看到什么东西能回答这个明确的问题 (在我的例子中,我正在使用一个Microsoft Surface应用程序,我使用的许多类都来自该应用程序) 因此,我想将包含几个固定项的ElementMenu附加到我的ScatterView中的每个ScatterViewItem,我可以这样做: <ControlTemplate x:Key="MenuedSVITemplate" TargetType="{x:Type s: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、向下转换和添加菜单项,在代码隐藏中实现这一点。)
提前谢谢 坦率地说,我没料到这会奏效,但它确实奏效了。检查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>
好的,这很有意思,但是如果我还想指定模板项的内容呢?e、 g.如果你的按钮是一个网格,我希望能够同时指定网格的内容和附加菜单?你能让另一个ContentPresenter显示不同的内容吗?