none
usercontrol RRS feed

  • Pergunta

  • Eu gostaria de saber como que eu crio um usercontrol WPF que tenha uma propriedade do tipo TextBox.


    A ideia seria +- essa:

    na janela:
        
             <TextBox Name="meu_textBox"/>

             <meucontrole:controle propriedade="meu_textBox">



    e dai no user control teria:

              TextBox tb;

               // Atribui "meu_textBox" a tb

              tb.Focus();




    Resumindo então: eu quero fazer um userControl que coloque o" focus()" em um texbox externo ao usercontrol. Para isso  teria que passar o textbox através de uma propriedade desse usercontrol.



    Agradeço desde já!!!!


    quarta-feira, 4 de fevereiro de 2009 02:28

Respostas

  • Segue um exemplo:

    Window1.xaml
    <Window x:Class="WpfApplication1.Window1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:c="clr-namespace:WpfApplication1" 
        Title="Window1">  
        <StackPanel> 
            <TextBox Name="TextBox1" Height="30"/>  
            <c:UserControl1 Propriedade="TextBox1" Height="20"/>  
        </StackPanel> 
    </Window> 
     

    UserControl1.xaml
    <UserControl x:Class="WpfApplication1.UserControl1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Height="300" Width="300">  
        <Grid> 
            <Button Click="Button_Click"/>  
        </Grid> 
    </UserControl> 

    UserControl1.xaml.cs
    using System;  
    using System.Windows;  
    using System.Windows.Controls;  
    using System.Windows.Media;  
     
    namespace WpfApplication1 {  
        /// <summary>  
        /// Interaction logic for UserControl1.xaml  
        /// </summary>  
        public partial class UserControl1 : UserControl {  
            public String Propriedade { getset; }  
     
            public UserControl1() {  
                InitializeComponent();  
            }  
     
            private FrameworkElement GetOwner() {  
                FrameworkElement element = this.Parent as FrameworkElement;  
                while (element.Parent != null) {  
                    element = element.Parent as FrameworkElement;  
                }  
     
                return element as FrameworkElement;  
            }  
     
            private void Button_Click(object sender, RoutedEventArgs e) {  
                var owner = this.GetOwner();  
                var control = owner.FindName(this.Propriedade);  
                if (control is TextBox)  
                    (control as TextBox).Background = Brushes.Red;  
            }  
        }  
    }  
     
    quarta-feira, 4 de fevereiro de 2009 16:41
    Moderador

Todas as Respostas

  • Segue um exemplo:

    Window1.xaml
    <Window x:Class="WpfApplication1.Window1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:c="clr-namespace:WpfApplication1" 
        Title="Window1">  
        <StackPanel> 
            <TextBox Name="TextBox1" Height="30"/>  
            <c:UserControl1 Propriedade="TextBox1" Height="20"/>  
        </StackPanel> 
    </Window> 
     

    UserControl1.xaml
    <UserControl x:Class="WpfApplication1.UserControl1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Height="300" Width="300">  
        <Grid> 
            <Button Click="Button_Click"/>  
        </Grid> 
    </UserControl> 

    UserControl1.xaml.cs
    using System;  
    using System.Windows;  
    using System.Windows.Controls;  
    using System.Windows.Media;  
     
    namespace WpfApplication1 {  
        /// <summary>  
        /// Interaction logic for UserControl1.xaml  
        /// </summary>  
        public partial class UserControl1 : UserControl {  
            public String Propriedade { getset; }  
     
            public UserControl1() {  
                InitializeComponent();  
            }  
     
            private FrameworkElement GetOwner() {  
                FrameworkElement element = this.Parent as FrameworkElement;  
                while (element.Parent != null) {  
                    element = element.Parent as FrameworkElement;  
                }  
     
                return element as FrameworkElement;  
            }  
     
            private void Button_Click(object sender, RoutedEventArgs e) {  
                var owner = this.GetOwner();  
                var control = owner.FindName(this.Propriedade);  
                if (control is TextBox)  
                    (control as TextBox).Background = Brushes.Red;  
            }  
        }  
    }  
     
    quarta-feira, 4 de fevereiro de 2009 16:41
    Moderador
  • alias... vc tmb pode usar o metodo 

    Window.GetWindow(this); ao inves do metodo this.GetOwner();  que eu fiz... mas se vc usar esse mesmo control em um Page por exemplo ele nao vai funcionar....


    quarta-feira, 4 de fevereiro de 2009 16:45
    Moderador