c# – 将Treeview放在TabControl内容页面中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 将Treeview放在TabControl内容页面中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3920字,纯文字阅读大概需要6分钟。
内容图文
我目前正在构建一个XML编辑器,现在我想实现同时打开和编辑多个XML文件的功能.每个文件都应该由TabControl中的选项卡表示,而选项卡的内容显示XML结构的分层TreeView.
由于我不是XAML数据绑定方面的专家,因此我无法从已经实现的视图模型对象填充树视图.
我的窗口:
public partial class EditorWindow : Window
{
private ObservableCollection<FileTab> tabList;
public EditorWindow()
{
InitializeComponent();
xsdManager = null;
tabList = new ObservableCollection<FileTab>();
editorWindow.DataContext = tabList;
tabControl.ItemsSource = tabList;
FileTab pt = new FileTab(@"C:\Users\User\Documents\Test.xml");
tabList.Add(pt);
refreshTabControl();
}
private void OpenButtonClick(object sender, RoutedEventArgs e)
{
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.DefaultExt = ".xml";
fileDialog.Filter = "XML files (.xml)|*.xml";
Nullable<bool> result = fileDialog.ShowDialog();
if (result == true)
{
string filename = fileDialog.FileName;
Console.WriteLine("MainWindow.SchemaButtonClick:: " + filename);
tabList.Add(new FileTab(filename));
Console.WriteLine("New Tab: " + Path.GetFileName(filename));
refreshTabControl();
}
}
private void refreshTabControl()
{
tabControl.Items.Refresh();
}
}
我的窗口XAML:
<Window x:Class="XmlTool.EditorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XmlTool"
Title="EditorWindow" Height="300" Width="300" Name="editorWindow">
<StackPanel>
<Button Click="OpenButtonClick">Open XML</Button>
<TabControl Name="tabControl" ItemsSource="{Binding tabList}" Height="200">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TreeView Name="xmlTreeView">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding treeRoot}" DataType="{x:Type local:XElementViewModel}">
<Label Name="elementNameLabel" Content="{Binding ElementName=treeRoot, Path=name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</StackPanel>
</Window>
类XElementViewModel是XElement的视图模型,包含XElementViewmodel对象列表中的所有子元素.
类FileTab:
class FileTab
{
public string header { get; set; }
public XElementViewModel treeRoot { get; set; }
public FileTab()
{
header = "Default tab";
treeRoot = new XElementViewModel(@"C:\Users\User\Documents\ExampleXMLs\Test.xml");
}
public FileTab(string path)
{
header = Path.GetFileName(path);
Console.WriteLine("ProjectTab: header = " + header);
treeRoot = new XElementViewModel(path);
Console.WriteLine("ProjectTab: treeRoot.name = " + treeRoot.name);
}
}
当前代码正确添加了名为打开文件的新选项卡,但它根本不显示Treeview.正如我所说,我对数据绑定并不是那么好,所以任何有关这方面的建议都会有所帮助!
解决方法:
如果有人有兴趣,我可以通过玩一下绑定来使它工作.使用下面的XAML,它显示具有XML结构的TreeView,并在选择选项卡时在相应的树之间切换.
<Window x:Class="XmlTool.EditorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XmlTool"
Title="EditorWindow" Height="300" Width="300" Name="editorWindow">
<StackPanel>
<Button Click="OpenButtonClick">Open XML</Button>
<TabControl Name="tabControl" ItemsSource="{Binding tabList}" Height="200">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TreeView Name="xmlTreeView" ItemsSource="{Binding treeRoot.childrenList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding childrenList}" DataType="{x:Type local:XElementViewModel}">
<Label Name="elementNameLabel" Content="{Binding name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</StackPanel>
</Window>
内容总结
以上是互联网集市为您收集整理的c# – 将Treeview放在TabControl内容页面中全部内容,希望文章能够帮你解决c# – 将Treeview放在TabControl内容页面中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。