Добавление и изменение usercontrol во время выполнения в приложении WPF - PullRequest
0 голосов
/ 19 ноября 2009

У меня следующая ситуация, я собираюсь использовать WPF впервые, поэтому любые предложения о том, как действовать, будут хороши: У меня есть выпадающий список, когда я выбираю любой элемент из него - это должно изменить структуру элементов управления в том же окне. Новые элементы управления содержат - два элемента меню, текстовое поле и список. Выбор одного пункта меню отобразит текстовое поле, а другой отобразит список. Теперь для каждого элемента в начальном поле со списком у меня будет различная информация для каждого пункта меню.

Проблемы: Скажем, у меня есть 10 пунктов в поле со списком - и 2 пункта меню для каждого - так что 20 различных вещей, чтобы показать. - Как я должен объявить эти 20 разных вещей - Как я должен загружать каждый, когда выбрана конкретная комбинация

Ответы [ 2 ]

0 голосов
/ 19 ноября 2009

Вы должны посмотреть на ControlTemplate. Вы можете определить набор шаблонов, а затем применить их к элементу управления, заставляя их быть такими, какими вы хотите их видеть. поэтому, когда событие измененного элемента запускается в раскрывающемся списке, загрузите и примените нужный шаблон.

<!--- your xaml file --->
    <Control x:Name="Main"/>


// you CS file....
    OnItemChanage(....)
    {
        if ( Main!= null ) 
        Main.Template = MyNewTemplate;
    }
0 голосов
/ 19 ноября 2009

Если вы хотите показать несколько наборов элементов управления одновременно, добавьте в окно все элементы управления и установите их Visibility, используя привязку данных, и используйте ComboBox, чтобы обновить свойства, с которыми связаны элементы управления.

Или, если вы хотите показать только один элемент управления за раз, просто используйте DataContext из ComboBox:

<Window.DataContext>
  <x:Array x:Key="myItems">
    <local:Item MenuItem1="abc" MenuItem2="def" />
    <local:Item MenuItem1="ghi" MenuItem2="jkl" />
    ...
    <local:Item MenuItem1="ghi" MenuItem2="jkl" />
  </x:Array>
</Window.DataContext>


<Grid>
  ...
  <ComboBox x:Name="selection" ItemsSource="{Binding}">
     ...

  <StackPanel DataContext="{Binding /}" ...>
    <MenuItem Header="{Binding MenuItem1}" OnClick="DisplayListBox" />
    <MenuItem Header="{Binding MenuItem2}" OnClick="DisplayTextBox" />
    <TextBox Visibility="Hidden" ... />
    <ListBox Visibility="Hidden" ... />
  </StackPanel>

</Grid>

с соответствующим кодом для DisplayListBox и DisplayTextBox

...