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

时间:2009-11-26 03:30:32

标签: silverlight xaml

向XAML元素添加x:Name属性通常会导致成员变量被添加到支持类,然后可以使用普通代码进行访问。当有问题的元素是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>

1 个答案:

答案 0 :(得分:0)

您可以在DataTemplate的父级上使用FrameworkElement.FindName("objectName")方法,例如var uxAboutHtml = CompanyDetail.FindName("uxAboutHtml");获取对象的引用。这样做的缺点是,传递给FindName的参数不会以XAML x:Name“objectName”属性强类型化。

我已经改变了这一点,现在我正在引用控件绑定的底层对象,这可能是一个更好的方法。

var htmlContent = (CompanyViewModel)CompanyDetail.CurrentItem;