2017-06-05 2 views
-1

Ich habe etwas von einem seltsamen Fehler, den ich versuche, mich zu befreien. Ich habe einen benutzerdefinierten .cur-Cursor für eine meiner Anwendungen erstellt. Ich habe den benutzerdefinierten Cursor in einem Bildordner in das Projekt geladen, auf meine Ressourcen festgelegt und eine statische Klasse erstellt, um den Medienstream dafür zu öffnen und den Cursor an die Fenster zu übergeben. Von dort in meiner XAML habe ich den folgenden Code:Bindung an statische Klasse/Feld

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:myCtrls="clr-namespace:UserControlsLibrary;assembly=UserControlsLibrary" 
     xmlns:pos="clr-namespace:POSystem" 
     x:Name="Main" x:Class="POSystem.MainWindow" 
     Title="Purchase Order" 
     Cursor="{Binding Source={x:Static pos:POProperties.LTC_Cursor}, Mode=OneWay}" 
     Height="850" Width="1100" Background="{StaticResource BackgroundImage}" 
     Icon="Images/logo_only_Xns_icon.ico"> 
    <Grid x:Name="TheGrid" Focusable="True" 
     MouseDown="ClearFocus_OnClick" Background="Transparent"> 
     <StackPanel x:Name="Panelicus"> 
     </StackPanel> 
    </Grid> 
</Window> 

fand ich diese Methode, um statische Klassen von Bindungs ​​here und es funktioniert technisch. Das Problem ist, dass, obwohl ich das Projekt aufgebaut habe und auch mit der Beschreibung des Code erfolgreich es zeigt einen ungültigen Markup Fehler ausgeführt:

Der Name „POProperties“ existiert nicht im Namensraum „clr-Namespace: POSystem "

Dieser Fehler ist jedoch falsch, aber es verursacht, dass ich den XAML-Designer in Visual Studio nicht verwenden kann.

Der POProperties Code:

namespace POSystem 
{ 
    public static class POProperties 
    { 
    private static Cursor _ltc_cursor; 
    public static Cursor LTC_Cursor 
    { 
     get => _ltc_cursor ?? new Cursor(new System.IO.MemoryStream(Properties.Resources.LTC_Custom_Cursor)); 
     set => _ltc_cursor = value; 
    } 
    } 
} 
+0

Wahrscheinlich befindet sich 'POProperties' in einem anderen Namespace (außer' POSsystem') oder ist keine Klasse. Sie sollten einige zusätzliche Details angeben –

+0

Ich habe der Frage einen Code hinzugefügt. – ARidder101

Antwort

0

Ich habe ungeduldig mit dem Versuch, die statische Eigenschaft Methode zu verwenden, so dass ich nur eine statische Instanziierung des POProperties in einer jetzt nicht statischen Klasse ohne statische Elemente außerhalb der Instanziierung . Code wie folgt:

Fenster:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:myCtrls="clr-namespace:UserControlsLibrary;assembly=UserControlsLibrary" 
     x:Name="Main" x:Class="POSystem.MainWindow" Title="Purchase Order" Cursor="{Binding LTC_Cursor, Mode=OneWay}" 
     Height="850" Width="1100" Background="{StaticResource BackgroundImage}" Icon="Images/logo_only_Xns_icon.ico"> 
    <Grid x:Name="TheGrid" Focusable="True" MouseDown="ClearFocus_OnClick" Background="Transparent"> 
     <StackPanel x:Name="Panelicus"> 
      <TextBox x:Name="PONumLabel" Style="{StaticResource TBLabelStyle}" Width="250" Text="PO Number:"/> 
      <myCtrls:DDTextBox x:Name="ItemsBox" Width="300" VerticalAlignment="Top" HorizontalAlignment="Left" MinHeight="25" Panel.ZIndex="1"/> 
     </StackPanel> 
    </Grid> 
</Window> 

Code Hinter am Fenster:

namespace POSystem 
{ 
    public partial class MainWindow : Window, INotifyPropertyChanged 
    { 
    private DataContext _data = new DataContext(); 
    internal DataContext Data { get => _data ?? new DataContext(); set => _data = value; } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = POProperties.Instance; 
    }  

    public void ClearFocus_OnClick(object sender, MouseButtonEventArgs e) { Keyboard.ClearFocus(); } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged([CallerMemberName] string Name = "") 
    { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(Name)); } 
    } 
} 

POProperties Code:

namespace POSystem 
{ 
    public class POProperties : INotifyPropertyChanged 
    { 
    public POProperties() { } 

    private static readonly POProperties instance = new POProperties(); 
    public static POProperties Instance { get => instance; } 

    private UserInformation uinfo = new UserInformation(); 
    public UserInformation GetUserInformation { get => uinfo; } 

    private Cursor _ltc_cursor; 
    public Cursor LTC_Cursor 
    { 
     get => _ltc_cursor ?? new Cursor(new MemoryStream(Properties.Resources.LTC_Custom_Cursor)); 
     set => _ltc_cursor = value; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged([CallerMemberName] string Name = "") 
    { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(Name)); } 
} 

Diese Methode ich nicht mehr alle Fehler aus der Bindung und es funktioniert gut. Ich wusste von dieser Methode, die wichtiger für die Frage war, aber ich dachte, dass die statische Klassenmethode besser wäre. Ich habe mich offensichtlich geirrt.