Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将代码隐藏元素注入XAML数据模板_C#_Wpf - Fatal编程技术网

C# 将代码隐藏元素注入XAML数据模板

C# 将代码隐藏元素注入XAML数据模板,c#,wpf,C#,Wpf,正如标题所示,我希望将代码隐藏元素注入到数据模板中,以便在运行时呈现 下面是我想将代码隐藏元素注入的XAML代码片段: <TabControl x:Name="tcDocuments" DockPanel.Dock="Top"> <TabControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal">

正如标题所示,我希望将代码隐藏元素注入到数据模板中,以便在运行时呈现

下面是我想将代码隐藏元素注入的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的项目列表添加一个新的DocumentTab对象时,RichTextBox属性“Content”就会插入到DataTemplate标记中

我想真正的问题是这可能吗


干杯。

您可以在数据模板中放置ContentControl,如下所示:

<DataTemplate>
    <ContentControl Content="{Binding Content}"/>
</DataTemplate>

您只需确保模板中的任何内容都具有适当的DataContext,否则绑定可能会更改

这样做的好处是,它不是特定于DocumentTab的,您可以拥有任何具有作为UIElement的内容属性的类


这为您提供了更多信息,并展示了一些将内容设置为UIElements的示例(尽管仅在代码后面显示)

它是否始终是DocumentTab?您可以将TabControl的ItemsSource绑定到ObservableCollection,并使DataTemplate成为RichTextBox吗?您需要更改内容的数据类型。您可以在DataTemplate中放置ContentControl,并将其内容属性设置为与DocumentTab的内容属性的绑定,或任何具有内容属性的模型。这允许您使用任何具有内容属性的类。您通常不应该在模型中引用UI元素(
RichTextBox
)。
<DataTemplate>
    <ContentControl Content="{Binding Content}"/>
</DataTemplate>