我试图从我的标签控件中删除当前所选标签的TextEditor控件。选项卡和文本编辑器是动态创建的,因此简单地引用文本编辑器不是一个选项。我搜索得很远,到目前为止,没有任何答案对我有帮助。
以下代码适用于Winforms,但不适用于WPF:
var currentTextEdit = tabControl.SelectedTab.Controls.OfType<TextEditor>().First();
这些问题中是否有某些东西可能是我错过了?
这就是我创建每个标签并为每个创建的标签添加TextEditor控件的方法:
TabControl itemsTab = (TabControl)this.FindName("tabControl");
TextEditor textEdit = new TextEditor();
然后创建新标签并添加文本编辑器:
TabItem newTab = new TabItem();
newTab.Content = textEdit;
itemsTab.Items.Add(newTab);
在代码的下方,我得到了当前选中的标签,如下所示:
TabItem ti = tabControl.SelectedItems as TabItem;
使用GetChildOfType扩展方法,我试图像这样获取当前的文本编辑器:
var currentTextEditor = ti.GetChildOfType<TextEditor>();
此代码返回NullReferenceException:
File.WriteAllText(saveF.FileName, currentTextEditor.Text);
答案 0 :(得分:0)
使用WPF时,我通常使用方法
collect(Report::new, Report::add, Report::add)
答案 1 :(得分:0)
事实上,我在评论中写了一个不对的东西。与其他控件进行比较时,TabControl
的工作方式略有不同。它有一个TabItems
的集合。 TabControl可以显示属于其集合的每个TabItem的每个标题。
同时TabControl“抓取”选定的TabItem的内容并将其添加到其ContentPresenter
(它被称为PART_SelectedContentHost - 只需使用ILSpy)。
因此,回到您的问题,您必须直接在TextEditor
中搜索TabControl
。然后你可以使用这段代码:
TabControl itemsTab = (TabControl)FindName("tabControl");
TextEditor currentTextEditor = itemsTab.GetChildOfType<TextEditor>();
if (currentTextEditor != null)
{
File.WriteAllText(saveF.FileName, currentTextEditor.Text);
}
您应该始终检查从GetChildOfType<T>
方法获取的对象是否为空,因为如果GetChildOfType<T>
找不到类型为T的控件,则返回null。
正如我在之前的评论中所说,您可以找到GetChildOfType<T>
代码<a href="#" class="lightbox_button" data-box="#lightbox" data-panel="#lightbox_panel">
<div class="button" >button</div>
</a>
。
我希望这个答案可以帮到你。