Как вставить Gviewer автоматического макета графика Microsoft (пользовательский элемент управления) в TabItem?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как вставить Gviewer автоматического макета графика Microsoft (пользовательский элемент управления) в TabItem?

Сообщение Anonymous »

Я использую Microsoft Automatic Graph Layout (MSAGL) для создания приложения WPF с использованием MVVM.
MSAGL имеет встроенный класс Gviewer, который наследуется от System.Windows.Forms. Пользовательский контроль. Этот объект Gviewer отображает график, который MSAGL строит с моими данными, а также панель инструментов и некоторые другие элементы управления.
Во всех примерах, которые я могу найти, этот Gviewer просто добавляется в элементы управления созданной формы. в коде, который отображает график и элементы управления Gviewer в новом всплывающем окне, например:
Gviewer в новой форме/окне
Это работает и отображает мой график правильно, но вместо использования нового окна и формы я хочу встроить и показать эти объекты Gviewer в элементах TabItems элемента управления TabControl, который есть в существующем окне моего приложения. Для этого я пытаюсь связать свои объекты Gviewer с содержимым ContentPresenters, найденным в DataTemplate моего TabControl.
К сожалению, я получаю только пустые TabItems, в которых ничего не отображается, и не вижу своих ошибка или правильное решение.
XAML для моего TabControl: Моя модель представления для моих элементов TabItems:

Код: Выделить всё

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();
}
}
}
И связанный код в моей MainViewModel:

Код: Выделить всё

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());
}
}
}
Я также пытался связать Gviewer с ContentControl, результат был тот же, ничего не отображалось, кроме пустого элемента TabItem.
Буду очень признателен за любую помощь, которую вы можете оказать, чтобы это работало в TabControl.

Подробнее здесь: https://stackoverflow.com/questions/785 ... l-into-a-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»