Saltar al contenido

¿Cómo puedo acceder a un control en WPF desde otra clase o ventana?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *