Silverlight x:Name属性并不总是创建成员或字段变量

Silverlight x:Name属性并不总是创建成员或字段变量,silverlight,xaml,Silverlight,Xaml,向XAML元素添加属性通常会导致将成员变量添加到支持类中,然后可以使用普通代码访问该支持类。当所讨论的元素是DataTemplate的一部分时,不会创建字段 我可以理解DataTemplate使这成为一个特例,但是有人能向我解释一下基本原理吗?另外,在.NET代码中访问对象的选项有哪些 <dataControls:DataForm x:Name="CompanyDetail" CurrentItem="{Binding CurrentItem}" AutoGenerateFields="F

向XAML元素添加属性通常会导致将成员变量添加到支持类中,然后可以使用普通代码访问该支持类。当所讨论的元素是DataTemplate的一部分时,不会创建字段

我可以理解DataTemplate使这成为一个特例,但是有人能向我解释一下基本原理吗?另外,在.NET代码中访问对象的选项有哪些

<dataControls:DataForm x:Name="CompanyDetail" CurrentItem="{Binding CurrentItem}" AutoGenerateFields="False">
    <dataControls:DataForm.EditTemplate>
        <DataTemplate>
            <StackPanel dataControls:DataField.IsFieldGroup="True">
                <dataControls:DataField Label="About">
                    <Border Height="150" Style="{StaticResource HtmlPlaceHolderBorderStyle}" Width="298" VerticalAlignment="Top">
                        <telerik:RadHtmlPlaceholder x:Name="uxAboutHtml" x:FieldModifier="Public" HtmlSource="{Binding About, Mode=TwoWay}"/>
                    </Border>
                </dataControls:DataField>
            </StackPanel>
        </DataTemplate>
    </dataControls:DataForm.EditTemplate>
</dataControls:DataForm>

您可以在数据模板的父级上使用该方法,例如
var uxabouthttml=CompanyDetail.FindName(“uxabouthttml”)
以获取对对象的引用。这样做的缺点是,传递给FindName的paramater不会以具有xamlx:Name“objectName”属性的强类型结束

我已经改变了策略,现在引用控件绑定到的底层对象,这可能是更好的方法

var htmlContent = (CompanyViewModel)CompanyDetail.CurrentItem;

你真的测试过FindName方法吗?我还没能为它重现一个成功的测试,根据我的理解(这可能是错误的),它不应该工作?你可能是对的。在我的测试中,我使用了DataForm.findnameincontent方法。通过使用reflector,我看到此方法实际上访问了它。\u contentPresenter.Content.FindName提供的\u contentPresenter未设置。我还搜索并发现,只有在应用了模板之后,才应该使用FindName。文档对此进行了讨论。