Создание пользовательских элементов управления WPF в IronPython: элемент управления, составленный из стандартных элементов управления - PullRequest
2 голосов
/ 08 декабря 2010

Я рассмотрел другие вопросы по созданию пользовательских элементов управления здесь, а также другие онлайн-ресурсы, но я заблудился о том, как создать пользовательский элемент управления, не требующий файла кода C #. Поскольку мой проект - чистый IronPython, я не знаю, как бы интегрировать с ним код C #.

То, что я пытаюсь сделать, даже не так сложно; Никаких грязных стилей или преобразований или чего-либо еще. Я просто пытаюсь создать составной элемент управления для набора существующих, чтобы я мог процедурно добавлять / удалять эти составные элементы управления. Например, у меня есть этот GroupBox:

As you can see, it's just a GroupBox with a TextBox and a ComboBox in the Header, with its body populated by a UniformGrid containing some CheckBoxes. Here is the XAML:


    
        
             DO1 
            
            
        
    
    
        
            

Я читал о компоновке элементов управления, сгруппировав группу элементов управления в один элемент управления. Я хотел бы сделать весь этот GroupBox единым элементом управления, который я могу добавить или удалить процедурно. Как я могу сделать это с IronPython?

1 Ответ

0 голосов
/ 10 января 2011

Я все еще чувствую, что есть лучший способ, поэтому я оставлю этот вопрос открытым, но в итоге я добавил добавление пользовательских элементов управления в IronPython во время выполнения, просто поместив XAML в отдельный файл и загрузив его. с XamlReader.Load() и сохранением возвращаемого значения в новом объекте. Этот объект становится элементом управления, который затем может быть добавлен к Grid, DockPanel или тому, что у вас есть. Мне понадобилось некоторое время, чтобы установить умственную связь, с помощью которой я мог бы использовать XamlReader для создания любого элемента управления из XAML, а не просто Window s.

with File.OpenRead("MyControl.xaml") as xamlfile:
    newcontrol = System.Windows.Markup.XamlReader.Load(xamlfile)

ui.FindName("MyDockPanel").Children.Add(newcontrol)

Файл XAML просто содержит вышеупомянутую разметку GroupBox вместе с атрибутом xmlns, чтобы установить правильное пространство имен.

<GroupBox Name="DO1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <GroupBox.Header>
    ...
...