将元素后面的代码注入 XAML 数据模板
Posted
技术标签:
【中文标题】将元素后面的代码注入 XAML 数据模板【英文标题】:Inject Code Behind Element Into XAML Data Template 【发布时间】:2016-03-23 17:44:00 【问题描述】:正如标题所示,我希望将元素背后的代码注入到数据模板中,以便在运行时呈现。
这是我想将元素后面的代码注入的 XAML 代码:
<TabControl x:Name="tcDocuments" DockPanel.Dock="Top">
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Binding Name" />
<Button Content="x" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
(INSERT CLASS BELOW'S CONTENT PROPERTY HERE)
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
这是我将添加到 TabControl 上面的 Items 的类:
public class DocumentTab
public string File get; set;
public string Name get; set;
public RichTextBox Content get; set;
然后每次我将一个新的 DocumentTab 对象添加到 TabControl 的 Item 列表时,RichTextBox 属性“Content”就会插入到 DataTemplate 标记中。
我想这里真正的问题是这可能吗?
干杯。
【问题讨论】:
会一直是 DocumentTab 吗?您能否将 TabControl 的 ItemsSource 绑定到 ObservableCollectionRichTextBox
)。
【参考方案1】:
您可以像这样在 DataTemplate 中放置一个 ContentControl:
<DataTemplate>
<ContentControl Content="Binding Content"/>
</DataTemplate>
您只需要确保该模板所在的任何内容都具有正确的 DataContext,否则绑定可能会更改。
这样做的好处是它不是特定于 DocumentTab,您可以拥有任何具有 Content 属性的类,即您的 UIElement。
MSDN Documentation on ContentControl.Content 为您提供了更多信息,并展示了一些将内容设置为 UIElements 的示例(尽管仅在代码隐藏中显示)
【讨论】:
以上是关于将元素后面的代码注入 XAML 数据模板的主要内容,如果未能解决你的问题,请参考以下文章
如何在C#后面的代码中动态创建数据模板并绑定树视图层次结构数据