【问题标题】:The tag 'XXX' does not exist in XML namespace 'clr-namespace:XXX'XML 命名空间“clr-namespace:XXX”中不存在标记“XXX”
【发布时间】:2014-02-15 23:49:29
【问题描述】:

我有这个典型的 XML 命名空间 'clr-namespace:XXX' 中不存在标签 'XXX' 问题,但我真的找不到我做错的地方。

这是错误信息:

D:\CUI\Projects\FijiLauncherTester\FijiLauncherTester\Window1.xaml(9,14): 错误 MC3074:XML 中不存在标记“BoolToValueConverter” 命名空间 'clr-namespace:FijiLauncherTester'。第 9 行位置 14. 完成 建设项目“FijiLauncherTester.csproj”——失败

xmal 中的local:BoolToValueConverter 搞砸了,但我已经在 xaml 后面的 C# 代码中定义了它。

xaml:

<Window x:Class="FijiLauncherTester.Window1"        
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local ="clr-namespace:FijiLauncherTester"
    Title="Window1" Height="370" Width="600">

    <Window.Resources>
        <local:BoolToValueConverter x:Key="IjmFinishedStatusConverter" />       
    </Window.Resources>

    <Grid>
        <Button Content="Launch Fiji" Click="FijiLaucherButton_Click" Margin="79,0,79,31" Height="30" VerticalAlignment="Bottom">
        </Button>
        <Button x:Name="bOpenFijiDialog" Content="Open fiji"
                 Height="30" Width="90" Margin="0,50,147,0"
                 HorizontalAlignment="Right" VerticalAlignment="Top" 
                 Click="bOpenFijiDialog_Click" />

        <TextBox x:Name="tbFiji" Text="Fiji_x64 Location"
                 Height="30" Width="300" Margin="10,50"
                 HorizontalAlignment="Left" VerticalAlignment="Top" 
                 Background="Beige" />

        <Button x:Name="bOpenIjmDialog" Content="Open Ijm"
                 Height="30" Width="90" Margin="0,124,147,0"
                 HorizontalAlignment="Right" VerticalAlignment="Top" 
                 Click="bOpenIjmFileDialog_Click" />

        <TextBox x:Name="tbIjm" Text="Ijm Location"
                 Height="30" Margin="10,124,268,0" VerticalAlignment="Top" 
                 Background="Beige" />

        <Label Content="Logging?"
                 Height="30" Width="88" Margin="10,0,0,131"
                 HorizontalAlignment="Left" VerticalAlignment="Bottom" />
        <RadioButton Height="16" HorizontalAlignment="Left" Margin="160,0,0,140" Name="LogiingYes" VerticalAlignment="Bottom" Width="120" Checked="LoggingYes_Checked">Yes</RadioButton>
        <RadioButton Height="16" HorizontalAlignment="Right" Margin="0,0,166,140" Name="LogiingNo" VerticalAlignment="Bottom" Width="120" Checked="LoggingNo_Checked">No</RadioButton>
        <Label Height="30" Width="50" Content="Done?" HorizontalAlignment="Left" Margin="21,0,0,82" VerticalAlignment="Bottom" />
        <Label Margin="120,0,0,82" Height="30" VerticalAlignment="Bottom" Content="ffff" HorizontalAlignment="Left" Width="80" />   
    </Grid>
</Window>

C# 后面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using FijiLauncher;
using System.Windows.Forms;
using System.IO;

namespace FijiLauncherTester
{    

    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        private FijiLauncherControl _fl;
        private System.Windows.Forms.Timer _statusTimer;

        public string IjmFinished
        {
            get { return Convert.ToString(_fl.IjmFinished);}
            set { }
        }

        public Window1()
        {
            InitializeComponent();

            this.Loaded += new RoutedEventHandler(Window1_Loaded);
            this.Unloaded += new RoutedEventHandler(Window1_Unloaded);


        }

        void Window1_Unloaded(object sender, RoutedEventArgs e)
        {

            //_fl = new FijiLauncherControl();
            _fl.IjmFinished -= new Action<bool>(FlFinished);

            this._statusTimer.Stop();

           // throw new NotImplementedException();
        }

        void Window1_Loaded(object sender, RoutedEventArgs e)
        {

            _fl = new FijiLauncherControl();
            _fl.IjmFinished += new Action<bool>(FlFinished);

            this._statusTimer = new System.Windows.Forms.Timer();  // read log 4 times per sec 
            this._statusTimer.Interval = 125;
            this._statusTimer.Tick += new EventHandler(_statusTimer_Tick);
            IjmFinished = "0";
            //throw new NotImplementedException();
        }


        void FlFinished(bool val)
        {
            //System.Windows.MessageBox.Show(System.Windows.Application.Current.MainWindow, "Finished");
            System.Media.SystemSounds.Beep.Play();
        }

        void _statusTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                //if (_fl.ProcessFinished)
                //{
                //    _statusTimer.Stop();

                //    System.Windows.MessageBox.Show(System.Windows.Application.Current.MainWindow, "Finished");
                //    //System.Windows.MessageBox.Show("Process is finished");

                //}
            }
            catch (Exception ex)
            {
            }
        }      

        private void FijiLaucherButton_Click(object sender, RoutedEventArgs e)
        {         
            _statusTimer.Start();           
            _fl.LaunchFiji();

        }

        private void bOpenFijiDialog_Click(object sender, RoutedEventArgs e)
        {
             // Create an instance of the open file dialog box.
            OpenFileDialog openFijiDlg = new OpenFileDialog();
            Stream myStream = null;

            // Set filter options and filter index.
            openFijiDlg.Filter = "Application (.exe)|*.exe|All Files (*.*)|*.*";
            openFijiDlg.FilterIndex = 1;

            openFijiDlg.Multiselect = false;

            if (openFijiDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFijiDlg.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _fl.FijiExeFile = openFijiDlg.FileName;
                        }
                    }
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show("Error: Could not read fiji application file from disk. Original error: " + ex.Message);
                }
            }
        }

        private void bOpenIjmFileDialog_Click(object sender, RoutedEventArgs e)
        {

            // Create an instance of the open file dialog box.
            OpenFileDialog openIjmDlg = new OpenFileDialog();
            Stream myStream = null;

            // Set filter options and filter index.
            openIjmDlg.Filter = "ImageJ Macro (.ijm)|*.ijm|All Files (*.*)|*.*";
            openIjmDlg.FilterIndex = 1;

            openIjmDlg.Multiselect = false;

            if (openIjmDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    if ((myStream = openIjmDlg.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _fl.IjmFile = openIjmDlg.FileName;
                        }
                    }
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show("Error: Could not read ijm file from disk. Original error: " + ex.Message);
                }
            }

        }

        private void LoggingNo_Checked(object sender, RoutedEventArgs e)
        {
            _fl.IsLogOn = false;
        }

        private void LoggingYes_Checked(object sender, RoutedEventArgs e)
        {
            _fl.IsLogOn = true;
        }
    }


    public class BoolToValueConverter<T> : IValueConverter
    {
        public T FalseValue { get; set; }
        public T TrueValue { get; set; }

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return FalseValue;
            else
                return (bool)value ? TrueValue : FalseValue;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value != null ? value.Equals(TrueValue) : false;
        }
    }
}

我想知道这里发生了什么?我想念什么?我应该如何改变它?谢谢。

【问题讨论】:

    标签: c# wpf xaml ivalueconverter


    【解决方案1】:

    问题是你的BoolToValueConverter 类是一个泛型类。 WPF 正在寻找非泛型 BoolToValueConverter,而不是 BoolToValueConverter&lt;T&gt;。

    由于这是一个转换器,您可以删除泛型,只需为TrueValue 和FalseValue 使用System.Object 属性,因为Convert 和ConvertBack 无论如何都可以在System.Object 上工作:

    public class BoolToValueConverter : IValueConverter
    {
        // Note that you're never setting this!
        public object FalseValue { get; set; }
        public object TrueValue { get; set; }
    
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return FalseValue;
            else
                return (bool)value ? TrueValue : FalseValue;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value != null ? value.Equals(TrueValue) : false;
        }
    }
    

    【讨论】:

    • 你的意思是把它移到命名空间 FijiLauncherTester {} 之外?不,它不像我尝试的那样工作。
    • @NickXTsui 不,我的意思是你需要摆脱类上的&lt;T&gt; ;) XAML 不喜欢泛型,并且不理解寻找泛型类。跨度>
    • 你能把修改后的C#代码贴在这里吗?我不是 C# 专家,如果我理解正确,似乎不会有太大变化?谢谢。
    • 我用 System.Object 替换了 TrueValue 和 FalseValue,它没有编译。
    • @NickXTsui 在那里添加了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多