【问题标题】:Accessing a control which is in a contentpresenter in c#访问 c# 中 contentpresenter 中的控件
【发布时间】:2016-07-05 06:17:53
【问题描述】:

如何访问 contentpresenter 的内容模板中的命名控件。如何从cs文件访问webview控件(x:name=detView)。

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

【问题讨论】:

    标签: c# xaml win-universal-app uwp contentpresenter


    【解决方案1】:

    如果您使用 ContentPresenter 作为 ControlTemplate,如 Official Documentation 的示例。

    您可以通过controlName.ContentTemplateRoot获取模板。我根据上面官方文档的例子做了一个demo,在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;
    }
    

    【讨论】:

      【解决方案2】:

      在 C# 中,使用此代码查找 ContentPresenter 中存在的任何控件。

      如果TextBlock 存在于您的ContentPresenter 中,则首先创建TextBlock 的对象,然后对其进行转换,然后找到控制权。

      TextBlock myTextBlock = (TextBlock)ttt.FindName(“textBlock”, DetailContentPresenter);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        相关资源
        最近更新 更多