2013-05-31 7 views
11

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

ответ

31

Вы можете поместить содержимое окна в UserControl. В вашем окне есть только контент-контроль и кнопка для изменения содержимого. Нажав на кнопку, вы можете переназначить контент-свойство элемента управления контентом.

Я сделал небольшой пример для этого.

Часть XAML-код для MainWindow может выглядеть следующим образом:

<Window x:Class="WpfApplication3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Button Content="Switch" Click="ButtonClick"/> 
     <ContentControl x:Name="contentControl" Grid.Row="1"/> 
    </Grid> 
</Window> 

Я добавил два UserControls к раствору. CodeBehind для MainWindow выглядит следующим образом:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.contentControl.Content = new UserControl1(); 
    } 

    private void ButtonClick(object sender, RoutedEventArgs e) 
    { 
     this.contentControl.Content = new UserControl2(); 
    } 
} 

Update Я создал небольшой UserControl под названием MyUserControl. XAML-разметка выглядит

<UserControl x:Class="WpfApplication.MyUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <StackPanel Orientation="Vertical"> 
     <Label Content="This is a label on my UserControl"/> 
     <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> 
      <Button Content="Testbutton 1" Margin="5"/> 
      <Button Content="Testbutton 2" Margin="5"/> 
     </StackPanel> 
     <CheckBox Content="Check Me"/> 
    </StackPanel> 
</UserControl> 

В кнопке клику случае выше вы можете назначить новый экземпляр этого UserControl к контент-контроля. Это можно сделать по:

this.contentControl.Content = new MyUserControl(); 
+1

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

+1

Я обновил свой пост. Я надеюсь, что обновление поможет вам. – Tomtom

+2

, но пользовательский элемент управления также предварительно создан. как бы вы создали пользовательский элемент управления во время выполнения? –

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