MSAGL имеет встроенный класс Gviewer, который наследуется от System.Windows.Forms. Пользовательский контроль. Этот объект Gviewer отображает график, который MSAGL строит с моими данными, а также панель инструментов и некоторые другие элементы управления.
Во всех примерах, которые я могу найти, этот Gviewer просто добавляется в элементы управления созданной формы. в коде, который отображает график и элементы управления Gviewer в новом всплывающем окне, например:
Gviewer в новой форме/окне
Это работает и отображает мой график правильно, но вместо использования нового окна и формы я хочу встроить и показать эти объекты Gviewer в элементах TabItems элемента управления TabControl, который есть в существующем окне моего приложения. Для этого я пытаюсь связать свои объекты Gviewer с содержимым ContentPresenters, найденным в DataTemplate моего TabControl.
К сожалению, я получаю только пустые TabItems, в которых ничего не отображается, и не вижу своих ошибка или правильное решение.
XAML для моего TabControl:
Код: Выделить всё
Код: Выделить всё
using System.Windows.Forms;
using Microsoft.Msagl.GraphViewerGdi;
namespace MyApplication
{
public class ModuleNetworkTabViewModel : ViewModelBase
{
public string ModuleNetworkHeader { get; set; }
private GViewer _moduleNetworkGviewer;
public GViewer ModuleNetworkGviewer
{
get { return _moduleNetworkGviewer; }
set
{
_moduleNetworkGviewer = value;
NotifyPropertyChanged(nameof(ModuleNetworkGviewer));
}
}
public ModuleNetworkTabViewModel()
{
ModuleNetworkHeader = "Module Network";
ModuleNetworkGviewer = new GViewer();
ModuleNetworkGviewer.Graph = NetworkBuilder.MsaglGraph;
ModuleNetworkGviewer.Show();
// if I add this additional code, the Gviewer and graph will be shown correctly in a new form/window as in picture above
Form GviewerForm = new Form();
GviewerForm.Controls.Add(ModuleNetworkGviewer);
GviewerForm.Show();
}
}
}
Код: Выделить всё
namespace MyApplication
{
public class MainViewModel : ViewModelBase
{
private ObservableCollection _moduleNetworkTabItems;
public ObservableCollection ModuleNetworkTabItems
{
get { return _moduleNetworkTabItems; }
set
{
_moduleNetworkTabItems = value;
NotifyPropertyChanged(nameof(ModuleNetworkTabItems));
}
}
public MainViewModel()
{
ModuleNetworkTabItems = new ObservableCollection();
ModuleNetworkTabItems.Add(new ModuleNetworkTabViewModel());
}
}
}
Буду очень признателен за любую помощь, которую вы можете оказать, чтобы это работало в TabControl.
Подробнее здесь: https://stackoverflow.com/questions/785 ... l-into-a-t