C# 如何找到另一个控件UWP 8.1样式中定义的控件

C# 如何找到另一个控件UWP 8.1样式中定义的控件,c#,uwp,C#,Uwp,这么说吧, 我有一个GridView,它使用样式,它定义了你在GridView中看到的几乎所有东西,并在不同的文件中定义 这使得很难接触到该样式中的控件。 问题是我无法更改它,因此GridView将包含其中的定义,因为它是程序中的标准 所以我要寻找的是一种访问GridView的样式中定义的按钮的方法 这是该样式的定义(大致如下): 我设法在代码中达到了ControlTemplate级别,但就是这样。 它位于namespaceWindows.UI.Xaml.Controls中,如果这很重要的话 如

这么说吧, 我有一个
GridView
,它使用
样式
,它定义了你在
GridView
中看到的几乎所有东西,并在不同的文件中定义

这使得很难接触到该
样式中的控件。
问题是我无法更改它,因此
GridView
将包含其中的定义,因为它是程序中的标准

所以我要寻找的是一种访问
GridView
样式中定义的按钮的方法

这是该样式的定义(大致如下):

我设法在代码中达到了
ControlTemplate
级别,但就是这样。 它位于namespace
Windows.UI.Xaml.Controls
中,如果这很重要的话

如何找到另一个控件UWP 8.1样式中定义的控件

控件具有可用于检索实例化的
ControlTemplate
可视化树中的命名元素的方法。但它是受保护的方法。因此,我们需要将此方法重新打包为公共方法

public sealed class MyGridView : GridView
{
    public MyGridView()
    {
        this.DefaultStyleKey = typeof(GridView);
    }

    public DependencyObject GetChildWithName(string childName)
    {
        return GetTemplateChild(childName);
    }
}


<Page
    ......
    xmlns:local="using:InkCanvas"
    ......

<local:MyGridView x:Name="GlobalUserHeaderGridView" Style="{StaticResource GlobalUserHeader}"/>

我已经创建了该类,但xaml无法识别它。您是否像这样为
MyGridView
添加了namesapce
local:MyGridView
?在哪里添加它?不起作用。你看这个按钮不是这个GridView的子对象,所以你的方法返回。这是Style的孩子,但是Style是一个密封的类,所以我不能使用你的建议。我测试过,它工作得很好,你在你这边实现了上面的内容吗?
<GridView x:Name="GlobalUserHeaderGridView" Style="{StaticResource GlobalUserHeader}"/>
public sealed class MyGridView : GridView
{
    public MyGridView()
    {
        this.DefaultStyleKey = typeof(GridView);
    }

    public DependencyObject GetChildWithName(string childName)
    {
        return GetTemplateChild(childName);
    }
}


<Page
    ......
    xmlns:local="using:InkCanvas"
    ......

<local:MyGridView x:Name="GlobalUserHeaderGridView" Style="{StaticResource GlobalUserHeader}"/>
var btn = GlobalUserHeaderGridView.GetChildWithName("AuthUserStyleButton")