Как я могу получить доступ к элементу управления одного окна (richtextbox) из другого окна в wpf? - PullRequest
6 голосов
/ 08 февраля 2010

Я уверен, что это что-то очень простое, но я не могу понять это. Я искал здесь и на MSDN и не смог найти ответ. Мне нужно иметь возможность установить выбор richtextboxes через richtextbox.Selection.Select (TextPointer1, Textpointer2).

Ответы [ 4 ]

15 голосов
/ 08 февраля 2010

Application.Current содержит коллекцию всех окон в вашем приложении, вы можете получить другое окно с запросом, таким как

var window2 = Application.Current.Windows
    .Cast<Window>()
    .FirstOrDefault(window => window is Window2) as Window2;

и затем вы можете ссылаться на элемент управления из своего кода, как в

var richText = window2.MyRichTextBox
5 голосов
/ 26 апреля 2011
Application.Current.Windows.OfType(Of MainWindow).First
2 голосов
/ 08 февраля 2010

Вы не можете получить доступ к texbox из другого окна, поскольку оно является приватным для этого окна, однако вы можете обойти это, выставив RichTextBox как открытое свойство вашего окна (хак)

public RichTextBox RichTextBox {
  get{
    //the RichTextBox would have a property x:Name="richTextbox" in the xaml
    return richTextBox;
  }
}
1 голос
/ 08 февраля 2010

Вы должны иметь доступ к элементам управления на Window1 из Window2 кода, если вы этого хотите.Сгенерированные поля внутренние по умолчанию .

Все, что вам нужно, это присвоить элементу управления Window1 , например:

<RichTextBox x:Name="richtextbox" ... />

In Window2 код позади:

var window = new Window1(); // or use the existing instance of Window1
window.richtextbox.Selection.Select(TextPointer1, Textpointer2);

Лучшим вариантом будет инкапсуляция операции выбора в методе в коде позади Window1, чтобы не отдавать внутреннее.Тогда у вас будет:

// Window1.cs
public void Select(int param1, int param2)
{
    richtextbox.Selection.Select(param1, param2);
}

// Window2.cs
var window = new Window1(); // or use the existing instance of Window1
window.Select(TextPointer1, Textpointer2);
...