2012-03-16 56 views
0

撇開其他相關問題,但我沒有看到回答這個明確問題的東西。如何從XAML中訪問/修改作爲ControlTemplate一部分創建的元素?

(在我的情況,我工作的一個微軟的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,向下轉換,並以編程方式添加我的菜單項。)

在此先感謝!

回答

0

坦率地說,我沒有想到這個工作,但它確實。檢查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> 
+0

好的,這很有趣 - 但是如果我也希望能夠指定模板項目的內容呢?例如如果你的按鈕是一個Grid,並且我希望能夠指定Grid和附加菜單的內容?你能以某種方式有第二個ContentPresenter顯示不同的內容? – Sbodd 2012-03-19 21:03:55

相關問題