1 / 1 / 0
Регистрация: 14.06.2012
Сообщений: 353
1

Как принять овнера от формы, на которой лежит контрол?

15.06.2017, 22:48. Показов 907. Ответов 1
Метки нет (Все метки)

Привет! У меня есть контрол, который лежит на форме. В этом контроле есть кнопка, открывающая новую форму. Как сделать так, чтобы эта новая форма принимала овнера от формы, на которой лежит контрол?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2017, 22:48
Ответы с готовыми решениями:

Как заставить контрол принять ширину по содержимому из кода
Собственно. Есть label. Позиционирование top left. Как заставить его принять ширину по...

Подскажите как получить форму на которой расположен контрол
привет есть форма на ней контрол как получить ссылку на форму при этом контрол может лежать в...

Как открыть папку, в которой лежит проект?
Как открыть папку(Folder) в которой лежит Project.exe ? Folder\Project.exe Добавлено через 10...

Как открыть папку в которой лежит файл
Как открыть папку в которой лежит файл? В базе есть пути полные пути к файлам с их именами,...

1
251 / 127 / 54
Регистрация: 04.05.2013
Сообщений: 346
16.06.2017, 10:58 2
Лучший ответ Сообщение было отмечено Semael как решение

Решение

Метод для получения любого родителя любого контрола:

C#
1
2
3
4
5
6
7
8
9
10
11
12
public static T GetParent<T>(DependencyObject element) where T : DependencyObject
{            
    var parent = VisualTreeHelper.GetParent(element);
 
    if (parent == null)
        return null;
 
    if (parent is T)
        return parent as T;
 
    return GetParent<T>(parent);
}
Добавлено через 42 минуты
В стиле MVVM с примесью рекурсивной наркомании:

XML
1
2
3
4
5
6
<Window
        Title="MainWindow" Height="400" Width="600" WindowStartupLocation="CenterScreen">
    <DockPanel>
        <Button Width="100" Height="30" Content="Click me!" Command="{Binding ButtonCmd}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>
    </DockPanel>
</Window>
C#
1
2
3
4
5
6
7
8
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();           
            DataContext = new MainWindowViewModel(); 
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Command : ICommand
{
    public event EventHandler CanExecuteChanged;
    Action<object> _cmd;
    Func<bool> _canExecute;
 
 
    public Command(Action<object> cmd, Func<bool> canExecute)
    {
        _cmd = cmd;
        _canExecute = canExecute;
    }
    public bool CanExecute(object parameter)
    {
        return _canExecute();
    }
 
    public void Execute(object parameter)
    {
        _cmd(parameter);
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class MainWindowViewModel
{
    public MainWindowViewModel()
    {
        ButtonCmd = new Command(OnButtonClick, () => true);
    }
    
    public ICommand ButtonCmd { get; private set; }     
 
    private void OnButtonClick(object parameter)
    {
        Window parent = parameter as Window;
        MainWindow window = new MainWindow();
        window.ShowInTaskbar = false;
        window.Width = parent.ActualWidth - 10;
        window.Height = parent.ActualHeight - 10;
        window.Owner = parent;
        window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
        window.ShowDialog();
    }                  
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2017, 10:58
Помогаю со студенческими работами здесь

Как узнать название папки, в которой лежит файл?
есть файл, который инклудится в другие файлы в других папках, и в зависимости от того в какую папку...

Как принять Post данные с формы
как принять данные на контролер с формы пост вот форма @using(var form =...

Как принять данные из формы по строкам
Есть поле &lt;textarea&gt;&lt;/textarea&gt; в него вводятся URLы, каждый строго с новой строки: site1.ru...

Как принять параметр открываемой формы ?
Из документа открываю внешнюю обработку и передаю в нее параметра для последующего отбора. Надеюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru