2014-01-24 57 views
1

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

以下是错误消息:

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

在Xmal位的是其中搞砸了,但我在XAML后面的C#代码中定义它。

XAML:背后

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; 
     } 
    } 
} 

我想知道是怎么回事

<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#?我想念什么?我应该如何改变它?谢谢。

回答

3

问题是你的BoolToValueConverter类是泛型类。 WPF正在寻找非通用BoolToValueConverter,而不是BoolToValueConverter<T>

由于这是一个转换器,你可以删除仿制药,而只使用一个System.Object属性为TrueValueFalseValue,为ConvertSystem.ObjectConvertBack工作反正:

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; 
    } 
} 
+0

你的意思是将其移动空间外面FijiLauncherTester {}?不,它不像我尝试那样工作。 –

+0

@NickXTsui不,我的意思是你需要摆脱类上的'';)XAML不喜欢泛型,不理解寻找泛型类。 –

+0

你可以在这里粘贴修改后的C#代码吗?我不是C#专家,如果我理解正确,看起来不会有太大变化吗?谢谢。 –

相关问题