2016-03-09 9 views
1

Я использую Ironpython 2.7. Можно ли динамически генерировать элементы окна wpf на основе данных, найденных во время выполнения? Программа будет вызывать базу данных и загружать параметры, и я бы хотел создать TextBox (и ComboBox) для каждого загруженного параметра (например, если загружено 4 параметра, в окне будут показаны 4 текстовых блока с соответствующими ComboBoxes).Как динамически генерировать элементы WPF в Ironpython

Это что-то, что я могу сделать с декоратором свойств? Должен ли я генерировать xaml динамически, чтобы сделать это? Например:

import wpf 
    from System import Windows.Window 

    parameters = loadfromdatabase(args).... 
    xaml_filename = "program.xaml" 
    textBox_list = "" 
    cnt = 0 
    for param in parameters: 
     textBox_list += '<TextBox x:Name={} HorizontalAlignment="Left" Height="21" Width = "52" Margin="60,{},0,0" VerticalAlignment="Top"/>\n'.format(param,60+26*cnt) 
     cnt += 1 
    xaml_string = "<Window \n<Grid>\n" + textBox_list + "</Grid>\n</Window>" 

    with open(xaml_filename, "w") as f: 
     f.write(xaml_string) 

    class MyWindow(Window): 
     def __init__(self): 
      wpf.LoadComponent(self, xaml_filename) 

    if __name__ == '__main__': 
     Application().Run(MyWindow()) 

ответ

0

Вы бы динамически генерировать WPF элемент в IronPython так же, как вы могли бы сделать это в C#. См. WPF: How to dynamically Add Controls in dynamically created WPF Window, как это сделать на C#.

+0

Метод, который я предложил, также работал. Сделайте все ссылки на примере C#, который вы упомянули, перевести непосредственно на IronPython? – solvador

+0

Да, я так считаю. Просто напишите, как обычно, на C#, за исключением использования синтаксиса Python. –

+0

Запись в XAML имеет свои преимущества, но если вы должны написать код Python, то избавляйтесь от необходимости писать XAML. –

Смежные вопросы