TabControl 的 DataTemplate 中的 AvalonEdit

问题描述

当放置在 TabControl 项数据模板中时,我遇到了 AvalonEdit.TextEditor 的一些奇怪行为。 我创建了一个简单的测试应用程序来尽可能简单地说明: (重现步骤:运行应用程序,单击 + 两次(将出现两个选项卡),在一个文本编辑器中输入内容,然后切换到另一个选项卡) 我的期望:在另一个选项卡上看到不同的文本 我看到的是:我在上一个选项卡上输入的相同文本。

<Window x:Class="TestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="Testwindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDeFinitions>
            <RowDeFinition Height="80" />
            <RowDeFinition Height="*" />
        </Grid.RowDeFinitions>
        <Button Width="80" Height="80" Grid.Row="0" Click="Button_Click">+</Button>
        <TabControl x:Name="TabSelector" ItemsSource="{Binding Tabs}" Grid.Row="1">
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <avalonEdit:TextEditor />
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </Grid>
</Window>

这是代码隐藏:

using System;
using System.Collections.ObjectModel;
using System.Windows;

namespace TestApp
{
    public partial class MainWindow: Window
    {
        public ObservableCollection<string> Tabs { get; set; } = new ObservableCollection<string>();
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }
        private void Button_Click(object sender,RoutedEventArgs e)
        {
            Tabs.Add(Guid.NewGuid().ToString());
        }
    }
}

现在,当我单击 + 按钮时,会添加一个选项卡并显示 TextEditor,但是当我输入内容然后单击另一个选项卡时,它会显示相同的文本。它向我展示了相同的 TextEditor,但我想要的是在不同的选项卡上有不同的 TextEditor。 当我将 AvalonEdit TextEditor 更改为一个简单的 TextBox 时,一切都按预期工作,我可以在不同的选项卡上输入不同的文本。

这种奇怪的原因可能是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)