2012-10-21 1 views
0

Я пытаюсь написать приложение, которое использует MDI, в том смысле, что у меня есть один большой winsdow и область холста с несколькими маленькими дочерними окнами. Эти маленькие окна можно изменять, перемещать и перемещать в пределах холста.Параметры для использования MDI в WPF

я достиг выше с помощью этой библиотеки: http://wpfmdi.codeplex.com/

Однако библиотека полна ошибок и крайне ограничительный (помимо того, что это заброшенный проект).

Таким образом, мне было интересно, какие у меня есть другие варианты использования MDI в WPF. Я думаю, что было бы слишком сложно переписать библиотеку, подобную той, что была связана выше - она ​​в основном обрабатывает перетаскивание и изменение размеров маленьких окон, а также гарантирует, что их нельзя перетаскивать за края холста. Я не думаю, что было бы очень легко закодировать себя.

Любые идеи?

+0

Смотрите этот другой вопрос SO альтернатив http://stackoverflow.com/questions/5703954/alternative-to-mdi -in-wpf – Nasreddine

+0

Я не хочу альтернативы MDI, хотя - я знаю, что функциональность MDI - это то, что я хочу. В любом случае я ничего не могу с этим поделать, поскольку это часть спецификаций. Это должно быть MDI. –

+0

@Dot NET Я знаю, что это было какое-то время. Но любопытно узнать, нашли ли вы хорошее решение для реализации MDI в WPF. Я попробовал библиотеку, упомянутую в вопросе, и поделился схожими взглядами - кроме того, что это ошибка, похоже, что это плохо работает, когда контент MDI является элементом управления веб-браузером. –

ответ

0

У меня был другой взгляд на эту MDI-библиотеку. Думаю, я исправил проблему. Вы хотите, чтобы MdiChild был максимальным, как и при нажатии на него.

Проблема заключается в том, что если вы установите WindowState из MdiChild в Maximized в конструкторе главного окна, вы не получите ожидаемого изменения размера. Поэтому вам нужно убедиться, что основное окно загружено, а затем убедитесь, что MdiChild загружен. Если это так, вы можете программно установить WindowState из MdiChild и получить ожидаемое поведение.

См следующий пример кода (проверить полный исходный код ниже) для нагруженных-событий:

void Main_Loaded(object sender, RoutedEventArgs e) 
{ 
    var mdiChild = new MdiChild 
    { 
     Title = "Window Using Code", 
     Content = new ExampleControl(), 
     Width = 500, 
     Height = 450, 
     Position = new Point(200, 30) 
    }; 
    Container.Children.Add(mdiChild); 
    mdiChild.Loaded +=new RoutedEventHandler(mdiChild_Loaded); 
} 

void mdiChild_Loaded(object sender, RoutedEventArgs e) 
{ 
    if (sender is MdiChild) 
    { 
     var mdiChild = (sender as MdiChild); 
     mdiChild.WindowState = WindowState.Maximized; 
    } 
} 

Вот source code, чтобы заставить его работать. Позвольте мне знать, если это помогает.

вариант
+0

Привет, я не уверен, что я понимаю, но я не хочу, чтобы окно было максимально. Я действительно хочу, чтобы он имел тот же размер, что и его содержимое. –

+0

mdiChild.HorizontalContentAlignment = HorizontalAlignment.Stretch; mdiChild.VerticalContentAlignment = VerticalAlignment.Stretch; ? – pdvries

+0

Просто попробовал - не работал:/ –

0

Я думаю, вы должны использовать это, это круче:

http://avalondock.codeplex.com/

Он имеет вкладки, изменяемый размер закрепляемых панелей и т.д. Очень похожие на Visual Studio.

+0

Я не уверен, что это то, чего я хочу. Все, что мне нужно - это иметь несколько маленьких окон в моем основном приложении - не больше, не меньше. –

+0

Похоже, вы должны просто закодировать его сами, тогда нелегко управлять дочерними окнами. – jonathanpeppers

+0

Проблема в том, что я попытался сделать это изначально, и мне было так тяжело, что я прибегал к плагину:/ –