Как показать пользовательский элемент управления по нажатию кнопки в wpf? - PullRequest
3 голосов
/ 11 февраля 2012

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

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Вы можете легко добавить другое окно с вашим пользовательским контролем на нем!

Сначала создайте другое окно (щелкните правой кнопкой мыши в обозревателе решений, добавьте новый элемент, Окно). Во-вторых, перетащите пользовательский контроль в окно:

<Window x:Class="MyWpfApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DeleteMeTest="clr-namespace:DeleteMeTest"
        Title="Window1" Height="300" Width="300">
    <Grid>
        <MyWpfApplication:UserControl1 />
    </Grid>
</Window>

Затем необходимо настроить обработчик нажатия кнопки, чтобы отобразить окно:

MainWindow.xaml:

<Window x:Class="MyWpfApplication.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>
        <Button Content="Click Me" Click="Button_Click"/>
    </Grid>
</Window>

Обработчик Button_Click в MainWindow.xaml.cs:

private void Button_Click(object sender, RoutedEventArgs e)
{
    new Window1().ShowDialog();
}

Метод ShowDialog () открывает диалоговое окно, что означает, что окно находится сверху и с ним необходимо взаимодействовать (Закрыто), прежде чем вы сможете вернуться к взаимодействию с главным окном.

Вы также можете использовать метод Show, чтобы иметь неблокирующее окно.

1 голос
/ 12 февраля 2012

В демонстрационном приложении WPF Family Show пользовательские элементы управления создаются в главном окне ( MainWindow.xaml )

<!-- New User Control -->
<local:NewUserControl x:Name="NewUserControl" 
HorizontalAlignment="Center" VerticalAlignment="Center"
AddButtonClick="NewUserControl_AddButtonClick"/>

Затем в коде( MainWindow.xaml.cs ), различные пользовательские элементы управления скрыты или отображаются в результате действий нажатия кнопки.

/// <summary>
/// Hides the New User Control.
/// </summary>
private void HideNewUserControl()
{
     NewUserControl.Visibility = Visibility.Hidden;
     DiagramControl.Visibility = Visibility.Visible;
     enableButtons();

     if (family.Current != null)
        DetailsControl.DataContext = family.Current;
}

/// <summary>
/// Shows the New User Control.
/// </summary>
private void ShowNewUserControl()
{
        HideFamilyDataControl();
        HideDetailsPane();
        DiagramControl.Visibility = Visibility.Collapsed;
        WelcomeUserControl.Visibility = Visibility.Collapsed;

        if (PersonInfoControl.Visibility == Visibility.Visible)
            ((Storyboard)this.Resources["HidePersonInfo"]).Begin(this);

        NewUserControl.Visibility = Visibility.Visible;
        NewUserControl.ClearInputFields();
        NewUserControl.SetDefaultFocus();

        ... //Removed for brevity
    }

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

Вы можете поместить его в отдельное окно, как предложил Йоханнес Хофмайстер со своим ответом.

Основным преимуществом пользовательского элемента управления является то, что этот блок пользовательского интерфейса может использоваться в нескольких точках приложения.(Например, пользовательский элемент управления графического элемента управления с кнопками прокрутки, масштабирования и скриншота появится рядом с каждым графиком, что делает его идеальным кандидатом для пользовательского элемента управления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...