2016-07-05 59 views
2

如何訪問contentpresenter的內容模板中的指定控件。如何從cs文件訪問webview控件(x:name = detView)。訪問c中contentpresenter中的控件

 <ContentPresenter 
      x:Name="DetailContentPresenter" 
      Grid.Row="0" 
      BorderBrush="{ThemeResource SystemControlForegroundBaseLowBrush}" 
      Content="{x:Bind coll.SelectedItem,Mode=OneWay}"> 
      <ContentPresenter.ContentTemplate> 
       <DataTemplate x:DataType="data:coll_Details" x:Name="ttt"> 
        <Grid> 
          <WebView DefaultBackgroundColor="#F5F5F5" x:Name="detView" Source="ms-appx-web:///Assets/Web/collDetails.html"/> 
        </Grid> 
       </DataTemplate> 
      </ContentPresenter.ContentTemplate> 
      <ContentPresenter.ContentTransitions> 
       <TransitionCollection/> 
      </ContentPresenter.ContentTransitions> 
     </ContentPresenter> 

回答

0

在C#中,使用此代碼來查找出現在您的ContentPresenter中的任何控件。

如果您的ContentPresenter中存在TextBlock,請首先創建TextBlock的對象,然後投射它並找到控件。

TextBlock myTextBlock = (TextBlock)ttt.FindName(「textBlock」, DetailContentPresenter); 
1

如果您正在使用ContentPresenter作爲控件模板像Official Documentation的例子。

您可以通過controlName.ContentTemplateRoot獲取模板。我從上面的官方文檔的示例中做了一個演示,並在DataTemplate中放置了一個webview。

MainPage.xaml中:

<Page.Resources> 
    <Style TargetType="HyperlinkButton" x:Key="myStyle" > 
     ... 
     <Setter Property="Template" x:Name="presenterSetter"> 
      <Setter.Value> 
       <ControlTemplate TargetType="HyperlinkButton"> 
        <Grid x:Name="rootGrid"> 
         ... 
         <Border x:Name="Border" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          Margin="3"> 
          <ContentPresenter x:Name="MyContentPresenter" 
              Content="{TemplateBinding Content}" 
              ContentTransitions="{TemplateBinding ContentTransitions}" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
         > 
           <ContentPresenter.ContentTemplate> 
            <DataTemplate x:Name="ttt"> 
             <Grid> 
              <WebView Source="ms-appx-web:///Assets/Web/default.html" Name="myWebView"/> 
             </Grid> 
            </DataTemplate> 
           </ContentPresenter.ContentTemplate> 
          </ContentPresenter> 
         </Border> 
         <!--focus visuals omitted--> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel VerticalAlignment="Bottom"> 
     <HyperlinkButton Name="myHyperlink" Style="{StaticResource myStyle}">This is a link</HyperlinkButton> 
     <Button Click="Button_Click" Name="myBtn">Click Me</Button> 
    </StackPanel> 
</Grid> 

我可以使用下面的代碼獲得的WebView:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var myView= ((Grid)myHyperlink.ContentTemplateRoot).Children[0] as WebView; 
}