Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

O nome "ValidacaoTextBox" não existe no namespace "clr-namespace:ByteBank.Agencias"

Erro XDG0008. O nome "ValidacaoTextBox" não existe no namespace "clr-namespace:ByteBank.Agencias". ByteBank.Agencias D:_develop_work_csharp_learning\alura\csharp-eventos-delegates-lambda-Aula1\ByteBank.Agencias\EdicaoAgencia.xaml 12

Eu parei aqui, não sei como fazer pra tirar esse erro.

6 respostas

Oi Almir, como vai?

Infelizmente esse erro é algo muito genérico, fica complicado entendermos o que está acontecendo.

Tenho algumas dúvida:

  • Você está utilizando o projeto que disponibilizamos?
  • Senão, já fez o teste com o projeto disponibilizado?
  • Poderia compartilhar as classes EdicaoAgencia, MainWindow.xaml.cs e ValidacaoTextBox?
  • Poderia subir seu projeto no GitHub, caso não seja o projeto que disponibilizamos?

Aguardo retorno

Abraços

Ana, segue:

EdicaoAgencia.xaml

<Window x:Class="ByteBank.Agencias.EdicaoAgencia"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ByteBank.Agencias"
        mc:Ignorable="d"
        Title="EdicaoAgencia" Height="300" Width="470.667">
    <Canvas>
        <StackPanel Canvas.Top="15" Canvas.Left="15" Width="270">
            <TextBlock FontWeight="Bold">Número</TextBlock>
            <local:ValidacaoTextBox x:Name="txtNumero"></local:ValidacaoTextBox>
            <TextBlock FontWeight="Bold">Nome</TextBlock>
            <local:ValidacaoTextBox x:Name="txtNome"></local:ValidacaoTextBox>
            <TextBlock FontWeight="Bold">Telefone</TextBlock>
            <local:ValidacaoTextBox x:Name="txtTelefone"></local:ValidacaoTextBox>
            <TextBlock FontWeight="Bold">Descrição</TextBlock>
            <local:ValidacaoTextBox x:Name="txtDescricao"></local:ValidacaoTextBox>
            <TextBlock FontWeight="Bold">Endereço</TextBlock>
            <local:ValidacaoTextBox x:Name="txtEndereco"></local:ValidacaoTextBox>
        </StackPanel>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Canvas.Left="225" Canvas.Top="231" Width="228">
            <Button Name="btnOK" Content="OK" Margin="15,0" Padding="5" Width="85"></Button>
            <Button Name="btnCancelar" Content="Cancelar" Margin="15,0" Padding="5" Width="84"/>
        </StackPanel>
    </Canvas>
</Window>

EdicaoAgencia.xaml.cs

using ByteBank.Agencias.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace ByteBank.Agencias
{
    /// <summary>
    /// Lógica interna para EdicaoAgencia.xaml
    /// </summary>
    public partial class EdicaoAgencia : Window
    {
        private readonly Agencia _agencia;

        public EdicaoAgencia(Agencia agencia)
        {
            InitializeComponent();

            _agencia = agencia ?? throw new ArgumentNullException(nameof(agencia));

            AtualizarControles();
            AtualizarCamposDeTexto();
        }

        private void AtualizarControles()
        {
            RoutedEventHandler dialogResultTrue = (o, e) => DialogResult = true;
            RoutedEventHandler dialogResultFalse = (o, e) => DialogResult = false;

            var okEventHandler = dialogResultTrue + Fechar;
            var cancelarEventHandler = dialogResultFalse + Fechar;

            btnOK.Click += okEventHandler;
            btnCancelar.Click += cancelarEventHandler;

            txtNumero.TextChanged += ValidarCampoNulo;
            txtNumero.TextChanged += ValidarSomenteDigito;

            txtNome.TextChanged += ValidarCampoNulo;
            txtTelefone.TextChanged += ValidarCampoNulo;
            txtDescricao.TextChanged += ValidarCampoNulo;
            txtEndereco.TextChanged += ValidarCampoNulo;
        }

        private void ValidarSomenteDigito(object sender, EventArgs e)
        {
            var txt = sender as TextBox;
            var textoEstaVazio = txt.Text.All(Char.IsDigit);
            txt.Background = textoEstaVazio
                ? new SolidColorBrush(Colors.White)
                : new SolidColorBrush(Colors.Pink);
        }

        private void ValidarCampoNulo(object sender, EventArgs e)
        {
            var txt = sender as TextBox;
            var textoEstaVazio = String.IsNullOrEmpty(txt.Text);
            txt.Background = textoEstaVazio
                ? new SolidColorBrush(Colors.OrangeRed)
                : new SolidColorBrush(Colors.White);
        } 

        private void Fechar(object sender, RoutedEventArgs e) => Close();

        private void AtualizarCamposDeTexto()
        {
            txtNumero.Text = _agencia.Numero.Trim();
            txtNome.Text = _agencia.Nome.Trim();
            txtTelefone.Text = _agencia.Telefone.Trim();
            txtEndereco.Text = _agencia.Endereco.Trim();
            txtDescricao.Text = _agencia.Descricao.Trim();
        }
    }
}

Continuando...

MainWindow.xaml.cs

using ByteBank.Agencias.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ByteBank.Agencias
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private readonly ByteBankEntities _contextoBancoDeDados = new ByteBankEntities();

        public MainWindow()
        {
            InitializeComponent();
            AtualizarControles();
            AtualizarListaDeAgencias();
        }

        private void AtualizarControles()
        {
            btnExcluir.Click += new RoutedEventHandler(BtnExcluir_Click);
            btnEditar.Click += new RoutedEventHandler(BtnEditar_Click);
        }

        private void AtualizarListaDeAgencias()
        {
            lstAgencias.Items.Clear();
            var agencias = _contextoBancoDeDados.Agencias.ToList();

            foreach (var agencia in agencias)
                lstAgencias.Items.Add(agencia);
        }

        private void BtnExcluir_Click(object sender, RoutedEventArgs e)
        {
            var confirmacao =
                MessageBox.Show(
                    "Você deseja realmente excluir este item?",
                    "Confirmação",
                    MessageBoxButton.YesNo);
            if (confirmacao == MessageBoxResult.Yes)
            {
                //Excluir
            }
            else
            {
                //Não faz nada
            }
        }

        private void BtnEditar_Click(object sender, RoutedEventArgs e)
        {
            var agenciaAtual = (Agencia)lstAgencias.SelectedItem;
            var janelaEdicao = new EdicaoAgencia(agenciaAtual);
            var resultado = janelaEdicao.ShowDialog().Value;

            if (resultado)
            {
                // Uusário clicou em OK
            }
            else
            {
                // Usuário clicou em Cancelar
            }

        }

        private void lstAgencias_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var agenciaSelecionada = (Agencia)lstAgencias.SelectedItem;
            txtNumero.Text = agenciaSelecionada.Numero;
            txtNome.Text = agenciaSelecionada.Nome;
            txtTelefone.Text = agenciaSelecionada.Telefone;
            txtEndereco.Text = agenciaSelecionada.Endereco;
            txtDescricao.Text = agenciaSelecionada.Descricao;
        }
    }
}

Continuando...

ValidacaoTextBox

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;

namespace ByteBank.Agencias
{
    public delegate bool ValidacaoEventHandler(string texto);

    public class ValidacaoTextBox : TextBox
    {
    }
}
solução!

O XAML procura as classes que vc importa do namespace ByteBank.Agencias da dll local. Provavelmente vc fez referencia a tag local:ValidacaoTextBox antes de compilar a classe, assim quando o XAML tenta procurar a classe na DLL que seu código gera, ele não encontra, pq a mesma foi compilada antes da existencia da classe ValidacaoTextBox.

No final das contas, buildar a sua solução deve resolver esse problema.

Muito obrigado, Gustavo. Deu certo!

(Tirei a tag customizada, usando a original TextBox e compilei o projeto com sucesso. Depois, voltei com a tag custom e o problema foi resolvido.)