Recuerda que en la informática cualquier problema puede tener diferentes resoluciones, de igual modo nosotros aquí enseñamos lo más óptimo y mejor.
Solución:
Para acceder a los controles en otros formularios WPF, debe declarar ese control como público. La declaración predeterminada para los controles en WPF es pública, pero puede especificarla con este código:
Y después de eso, puede buscar en todas las ventanas activas de la aplicación para encontrar ventanas que tengan un control como este:
foreach (Window window in Application.Current.Windows)
if (window.GetType() == typeof(Window1))
(window as Window1).textBox1.Text = "I changed it from another window";
Desafortunadamente, los conceptos básicos de WPF son los enlaces de datos. Hacerlo de otra manera es ‘ir contra la corriente’, es una mala práctica y, en general, es mucho más complejo de codificar y comprender.
Para su problema en cuestión, si tiene datos para compartir entre vistas (e incluso si es solo una vista), cree una clase de modelo de vista que contenga propiedades para representar los datos y vincúlelas a las propiedades de su(s) vista(s).
En su código, solo administre su clase de modelo de vista y no toque la vista real con sus controles visuales y composición visual.
Descubrí que en WPF, tienes que lanzar Window como MainWindow.
parece complicado pero es ¡muy fácil!Sin embargo, tal vez no sean las mejores prácticas.
Supongamos que tenemos un Label1, un Button1 en MainWindow, y tiene una clase que se ocupa de todo lo relacionado con la interfaz de usuario llamada UI.
Podemos tener lo siguiente:
Clase de ventana principal:
namespace WpfApplication1
public partial class MainWindow : Window
UI ui = null;
//Here, "null" prevents an automatic instantiation of the class,
//which may raise a Stack Overflow Exception or not.
//If you're creating controls such as TextBoxes, Labels, Buttons...
public MainWindow()
InitializeComponent(); //This starts all controls created with the XAML Designer.
ui = new UI(); //Now we can safely create an instantiation of our UI class.
ui.Start();
Clase de interfaz de usuario:
namespace WpfApplication1
public class UI
MainWindow Form = Application.Current.Windows[0] as MainWindow;
//Bear in mind the array! Ensure it's the correct Window you're trying to catch.
public void Start()
Form.Label1.Content = "Yay! You made it!";
Form.Top = 0;
Form.Button1.Width = 50;
//Et voilá! You have now access to the MainWindow and all it's controls
//from a separate class/file!
CreateLabel(text, count); //Creating a control to be added to "Form".
private void CreateLabel(string Text, int Count)
Label aLabel = new Label();
aLabel.Name = Text.Replace(" ", "") + "Label";
aLabel.Content = Text + ": ";
aLabel.HorizontalAlignment = HorizontalAlignment.Right;
aLabel.VerticalAlignment = VerticalAlignment.Center;
aLabel.Margin = new Thickness(0);
aLabel.FontFamily = Form.DIN;
aLabel.FontSize = 29.333;
Grid.SetRow(aLabel, Count);
Grid.SetColumn(aLabel, 0);
Form.MainGrid.Children.Add(aLabel); //Haha! We're adding it to a Grid in "Form"!
Aquí tienes las reseñas y calificaciones
Más adelante puedes encontrar las críticas de otros creadores, tú igualmente eres capaz mostrar el tuyo si lo crees conveniente.