2014-01-24 50 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#專家,如果我理解正確,看起來不會有太大變化嗎?謝謝。 –

相關問題