2010-03-20 2 views
2

На продаваемой линии я заменяю содержимое UserControl содержимым другого UserControl, который динамически создается в коде. Я бы хотел заменить весь элемент управления, а не только контент. Есть ли способ сделать это?Как вы заменяете весь элемент xaml?

Edit:

Чтобы прояснить мое намерение, тем Items, который держит мой ListView коллекция владеет Control (который наследуется от UserControl), который знает, как манипулировать значение элемента. Простое связывание содержимого получает визуальное представление, но отбрасывает другие свойства, не связанные с содержимым производного элемента управления. Если бы я мог заменить этот UserControl в моем шаблоне более универсальным способом, это устранило бы эту проблему.

ответ

2

я, наконец, понял это один из:

<DataTemplate x:Key="editor"> 
     <ContentPresenter Content="{Binding Path=Control}"/> 
    </DataTemplate> 

ContentPresenter именно то, что я искал.

0

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

Или увидеть, если это может быть полезным: http://www.codeproject.com/KB/WPF/editabletextblock.aspx


Обновлено:

Вот хак (я не рекомендую это, и я ненавижу себя немного для размещения его):

<DataTemplate x:Key="editor"> 
     <Border Loaded="Border_Loaded"> 
      <UserControl Content="{Binding Control.content}"/> 
     </Border> 
    </DataTemplate> 

В коде позади:

private void Border_Loaded(object sender, RoutedEventArgs e) 
    { 
     // Example of replacement 
     Button b = new Button(); 
     b.Content = "Woot!"; 
     ((Border)sender).Child = b; 
    } 

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

+0

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

+0

Может ли переключение шаблонов на лету работать в этой ситуации? Подробнее см. Здесь http://codingbandit.com/Blog/blog/wpf-data-templates-part-3-switching-data-templates-at-runtime/. Существует способ сделать то, что вы хотите, но это kludgey, и я подозреваю, что не лучший подход для достижения желаемого поведения. –

+0

Переключение шаблонов на лету - это то, что я делал изначально. Переключение UserControl упрощает то, что я делаю. – luke

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