如何从代码隐藏中访问控件模板的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从代码隐藏中访问控件模板的元素相关的知识,希望对你有一定的参考价值。

我正在尝试访问内容控件的控件模板内的用户控件。特别:

  <ContentControl x:Name="MyList" >
        <ContentControl.Template>
            <ControlTemplate x:Name="MyControlTemplate">
                <Border RenderTransformOrigin="0,0" x:Name="border">
                    <UserControls:MyControl x:Name="MyControlName" Width="100" ViewModel="{Binding}" />

我可以访问this.MyList,但它说明了找不到.MyControlName。在这种情况下如何从代码隐藏中访问MyControlName对象?

谢谢!

答案

您需要获取模板并在模板化控件上按名称找到控件,如:

var template = MyList.Template;
var myControl = (MyControl)template.FindName("MyControlName", MyList);

模板就是这样:对要创建的内容的抽象描述,模板中的控件仅存在于模板化内容的上下文中。


请注意,如果要创建模板所用的控件,则只应访问控件模板中的元素。从外部访问应通过绑定属性和方法完成。

对于数据模板,这是类似的。您需要访问的所有内容应该绑定到一个对象,然后应该通过所述对象进行访问。在项目控件虚拟化其项目的情况下尤其如此,因此元素在大多数情况下甚至不存在。

另一答案

通过在控件中添加Loaded事件,然后在代码中将事件的发送者分配给某个变量,U也可以从每个模板获得控制权。

以上是关于如何从代码隐藏中访问控件模板的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何从继承的用户控件访问 viewModel 依赖属性?

Xamarin Forms - 从父页面代码隐藏的列表视图中访问控件

隐藏/显示片段中的导航元素

在 c# Razor 6.0 页面上的代码隐藏中访问 Html 控件

如何从 Android 中的 Fragment 访问 UI 元素?

如何从代码隐藏c#中显示隐藏的div