是否可以重用XAML文档中的元素?

时间:2014-01-14 12:33:00

标签: wpf xaml

是否可以声明XAML片段并在同一文档中重复使用?我有两个Telerik RadGridView控件应该有相同的列定义,我只想声明它们一次:

                <telerik:RadGridView Name="FirstGrid">
                    <telerik:RadGridView.Columns Id="TheColumns">
                        <telerik:GridViewToggleRowDetailsColumn Width="20"/>
                        <telerik:GridViewDataColumn IsReadOnly="True" Header="Id" DataMemberBinding="{Binding Id}" Width="30"/>
                        ...
                    </telerik:RadGridView.Columns>
                </telerik:RadGridView>

                <telerik:RadGridView Name="SecondGrid">
                    <InsertCrossReferenceHere Id="TheColumns">

显然,InsertCorssRefenceHere是我希望得到的答案的占位符,列中的Id也是如此。 我确信这可以使用XML标准的东西,但我找不到它是什么。

1 个答案:

答案 0 :(得分:0)

简短的回答是肯定的,这是可能的,但更长的答案是可能比它的价值更麻烦。嗯,这取决于你想要显示这些列的位置。例如,您可以在DataTemplate内为特定类型的数据定义它们,然后在显示该类型实例的任何位置,UI将按照您的定义呈现每个项目。

但是,我认为这是你想要的。还有其他方法可以做到这一点,但我怀疑你想要的最接近的是你在UserControl中定义你的用户界面@dkozl建议。

基本思路是......在UserControl中定义“可重复使用”的UI元素。将一个或多个DependencyProperty添加到UserControl,然后将数据从UI控件绑定到属性或属性的属性:

例如,在UserControl中,创建DependencyProperty类型Address并命名为Address。从UserControl内部,使用RelativeSource FindAncestor Binding来连接此属性:

<TextBlock Text="{Binding Street, RelativeSource={RelativeSource 
    AncestorType={x:Type YourXmlNamespacePrefix:YourUserControl}}}" />
...
<TextBlock Text="{Binding PostCode, RelativeSource={RelativeSource 
    AncestorType={x:Type YourXmlNamespacePrefix:YourUserControl}}}" />

然后,在父视图模型中使用名为Address的属性,您可以从外部将数据绑定到UserControl,如下所示:

<YourXmlNamespacePrefix:YourUserControl Address="{Binding Address}" />

您想要重复使用代码的任何地方,只需在上面添加另一行。