Доступ к элементу управления, который находится в презентаторе контента в С#

Как получить доступ к именованному элементу управления, который находится в шаблоне контента contentpresenter. как получить доступ к элементу управления webview (x: name = detView) из файла cs.

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

person Razor    schedule 05.07.2016    source источник


Ответы (2)


Если вы используете ContentPresenter в качестве ControlTemplate, например, Официальная документация.

Вы можете получить шаблон через controlName.ContentTemplateRoot. Я сделал демонстрацию из приведенного выше примера официальной документации и поместил веб-просмотр в DataTemplate.

Главная страница.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;
}
person Elvis Xia - MSFT    schedule 05.07.2016

В C# используйте этот код, чтобы найти любой элемент управления, присутствующий в вашем файле ContentPresenter.

Если TextBlock присутствует в вашем ContentPresenter, то сначала создайте объект TextBlock, затем разыграйте его, а затем найдите контроль.

TextBlock myTextBlock = (TextBlock)ttt.FindName(“textBlock”, DetailContentPresenter);
person Hardik Kothari    schedule 05.07.2016