Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von EgoFelix
Thema: Unterforum für .Net Core / ASP.Net Core
Am im Forum: Wünsche und Kritik

Hallo zusammen,

was haltet ihr von einem Unterforum bzgl. .Net Core / ASP.Net Core?

Es hat sich ja doch so einiges geändert.

MfG
Felix

Thema: ActiveX/Com Instanzen-Management: COM-Instanzen voneinander trennen o. d. Wiederverwendung verhind.
Am im Forum: Rund um die Programmierung

Hallo liebe myCSharp-Community!

Ich habe ein Problem mit dem Ansprechen bzw. Arbeiten mit verschiedenen COM-Servern.
In meinem Programm wird im Hintergrund eine Insanz z.B. von Word erstellt (Es geht nicht nur um Word, dies ist nur ein Beispiel) und dann bestimmte Operationen ausgeführt. Diese können auch etwas länger dauern (Die Zeit ist komplett variabel).

Nun habe ich folgendes Problem:
Währen im Hintergrund der COM-Prozess läuft und arbeitet, und der User im Explorer z.B. eine Datei öffnet, wird der besagte COM-Prozess "widerverwendet". Da ich diesen Prozess aber im Hintergrund verwende, wurden z.b. ggf. StatusMeldungen deaktiviert (Sonst ploppen plötzlich Dialoge auf).
D.h. der Prozess aus dem Hintergrund ist garnicht mehr richtig dafür geeignet vom User verwendet zu werden, geschweige denn im richtigen Zustand. Außerdem könnte der User die Datei, welche ich im Hintergrund geöffnet habe, einfach schließen, und somit die im Hintergrund ausführende Aktion zum Absturz bringen.

Hinzu kommt z.b. das man COM-Instanzen die man selber per CreateObject erstellt hat, auch wieder per Quit (Bei Word) schließen muss, da diese sonst als Zombie-Prozess im Taskmanager verbleiben. Hier kann nun aber plötzlich der Benutzer gerade in diesen Prozess eingreifen und auch arbeiten! Sollte dies der Fall sein, ist ein Quit keine gute Idee, da dies auch das aktuell vom Benutzer geöffnete Dokument schließen würde.

Meine Frage lautet nun:
Gibt es eine Möglichkeit, COM-Instanzen voneinander zu trennen, bzw. die Widerverwendung zu verhindern, damit der User eben die Datei z.B. nicht einfach während der laufenden Aktion schließen kann?

Mit freundlichen Grüßen
Felix


Edit:
Ich habe eben nochmal ein Beispiel geschrieben, um das Problem genauer zu erörtern.


using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Word = Microsoft.Office.Interop.Word;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("COM-Instanz-Problem");

            Type tWord = Type.GetTypeFromProgID("Word.Application");

            Word.Application oWord = (Word.Application)Activator.CreateInstance(tWord);

            Word.Document doc = oWord.Documents.Add();

            Console.WriteLine("Nun wird eine lange Aktion ausgeführt.... (jetzt z.b. Per Explorer eine Datei öffnen)");
            Console.ReadLine();

            doc.Close(false, Type.Missing, Type.Missing);
            oWord.Quit(false, Type.Missing, Type.Missing);
        }
    }
}


Desweiteren habe ich auch einen Post im Autodesk Forum gemacht, da ich das Problem erst beim Autodesk-Inventor vermutet habe...
Starting Inventor via Com - Closing will hold the Process open

Thema: WCF - Binding an mehrere IP's - WinAuth - Unterschiedliches Verhalten
Am im Forum: Netzwerktechnologien

Für das Multibinding (An mehreren Adressen), ist es beim net.tcp Binding nötigt, keine IP-Adresse anzugeben, sondern eben den Hostname.
Dies verwende ich extra aus diesem Grund.
Der String lautet also "net.tcp://TestRechner:1234/ClientService". Daher kann auch kein Fehler bei der Angabe der IP passieren.

Thema: WCF - Binding an mehrere IP's - WinAuth - Unterschiedliches Verhalten
Am im Forum: Netzwerktechnologien

Hallo!

Ich habe im WCF ein "Multibinding" erstellt, welches an mehreren IP's horcht.

Wenn ich auf dem selben Rechner via IPv4 zu dem Service verbinde, funktioniert alles einwandfrei. Verwende ich stattdessen IPv6, bekomme ich jedesmal die Fehlermeldung "Der Aufrufer wurde vom Dienst nicht authentifiziert." (Windows-Authentifizierung ist fehlgeschlagen).

Mein Binding sieht wie folgend aus:


NetTcpBinding binding = new NetTcpBinding();

// Buffered Mode
binding.TransferMode = TransferMode.Buffered;

// ClientZertifikat deaktivieren
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;

// WinAuth und Verschlüsselung
binding.Security.Mode = SecurityMode.TransportWithMessageCredential;
binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;

// Sessions aktivieren
binding.ReliableSession.Enabled = true;
binding.ReliableSession.InactivityTimeout = TimeSpan.FromSeconds(30);

// Größen einstellen
binding.MaxBufferSize = int.MaxValue;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
binding.ReaderQuotas.MaxDepth = int.MaxValue;
binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;

// Timeouts
binding.ReceiveTimeout = TimeSpan.FromSeconds(30);
binding.SendTimeout = TimeSpan.FromSeconds(30);
binding.CloseTimeout = TimeSpan.FromSeconds(10);
binding.OpenTimeout = TimeSpan.FromSeconds(10);

Als URI wird folgende verwendet:

string.Format("net.tcp://{0}:{1}/TestService/ClientService", System.Net.Dns.GetHostName(), this.settings.Port)

Ich kann mir nicht erklären, warum es auf einer IP geht, auf einer anderen aber nicht. Die Einstellungen bleiben ja die gleichen.

Hat vielleicht jemand schonmal dieses Problem gehabt, oder gibt es beim Multibinding irgendwelche Einschränkungen?

Thema: WCF - DualStack (IPv4 über IPv6)
Am im Forum: Netzwerktechnologien

Habs gefunden. Um bei einem WCF Dienst auf allen möglichen IP's zu horchen muss man anstatt 0.0.0.0 oder [::] einfach den lokalen Hostname angeben!

string.Format("net.tcp://{0}:{1}/Pfad/Zum/Service", System.Net.Dns.GetHostName(), port)

Thema: WCF - DualStack (IPv4 über IPv6)
Am im Forum: Netzwerktechnologien

Hallo,

ist es möglich einen WCF-Dienst auch IPv4 Verbindungen annehmen zu lassen, wenn ich diesen über IPv6 publiziere?

Bei einem normalen TcpListener ist folgendes möglich:

TcpListener TcpServer = new TcpListener(IPAddress.IPv6Any, 80);

// Nehme auch IPv4 Verbindungen auf dem IPv6 Socket an
TcpServer.Server.SetSocketOption(SocketOptionLevel.IPv6, System.Net.Sockets.SocketOptionName.IPv6Only, 0);

Kann ich dem WCF-Dienst irgendwie mitteilen, wenn er auf IPv6Any lauscht, auch IPv4 gemappt werden soll?

Leider klappt es auch nicht, einfach zwei ServiceEndpoints für IPAdress.Any sowie IPAdress.IPv6Any hinzuzufügen.

Sobald man bei Google nach etwas mit WCF und IPv6 sucht, bekommt man nur Treffer zu Teredo, oder komplett andere Treffer.

Thema: Styles - BaseOn - Dynamische Änderungen zur Laufzeit
Am im Forum: GUI: WPF und XAML

Unterstützt deine Klasse denn DynamicResources?

Beispiel:

<Utilities:StyleWrapper Style="{DynamicResource {x:Type ListBoxItem}}" />

Das geht bei dir? Und die Resource wird auch geupdatet, wenn ich ein anderes Theme dynamisch in der Laufzeit lade?

Thema: Styles - BaseOn - Dynamische Änderungen zur Laufzeit
Am im Forum: GUI: WPF und XAML

Falls jemand an der Lösung des Problems interessiert ist, habe ich hier nun eine ;)
Das ganze ist etwas trickreich zu behandeln, da Styles nach der ersten Verwendung versiegelt werden. Ich habe mir ein angepasstes ResourceDictionary sowie einen angpassten Style erstellt. Verwendet wird das ganze so:


    <ResourceDictionary.MergedDictionaries>
        <Themes:MonitoredResourceDictionary>
            <!-- Stylefür MyTabItem-->
            <Themes:DynamicStyle BaseType="{x:Type TabItem}" TargetType="{x:Type self:MyTabItem}">
                <Setter Property="self:MyTabItem.Foreground"  Value="Red" />
            </Themes:DynamicStyle>
        </Themes:MonitoredResourceDictionary>
    </ResourceDictionary.MergedDictionaries>


DynamicStyle.cs


    public class DynamicStyle : Style
    {
        /// <summary>
        /// Basis-Type (Wie BasedOn, nur als Type und nicht als Style)
        /// </summary>
        private Type baseType;

        /// <summary>
        /// Basis-Type (Wie BasedOn, nur als Type und nicht als Style)
        /// </summary>
        public Type BaseType 
        {
            get
            {
                // Rückgabe
                return this.baseType;
            }
            set
            {
                // Setzen des BasedOn Styles
                this.BasedOn = (Style)Application.Current.FindResource(value);

                // BaseType sichern
                this.baseType = value;
            }
        }

        /// <summary>
        /// Erstellt ein neues DynamicStyle-Objekt
        /// </summary>
        public DynamicStyle()
        {

        }
    }

MonitoredResourceDictionary.cs


    /// <summary>
    /// MonitoredResourceDictionary
    /// </summary>
    public class MonitoredResourceDictionary : ResourceDictionary
    {
        /// <summary>
        /// Hilfsvariable für das Monitoring
        /// </summary>
        private static bool applicationIsMonitored = false;

        /// <summary>
        /// Liste aller MonitoredResourceDictionary's
        /// </summary>
        private static List<WeakReference> Dicts = new List<WeakReference>();

        /// <summary>
        /// Update aller MonitoredResourceDictionary's
        /// </summary>
        private static void UpdateResources()
        {
            // Durchlaufe alle Dictionarys
            foreach (WeakReference wr in Dicts)
            {
                // DynamicStyles in dem Dictionary erneuern
                if (wr.IsAlive)
                {
                    MonitoredResourceDictionary mrd = (MonitoredResourceDictionary)wr.Target;

                    // Wenn das Dictionary bereits geupdated wird, überspringe dieses
                    if (mrd.IsInUpdate)
                        continue;

                    // Update auf ja setzen
                    mrd.IsInUpdate = true;

                    // Updaten
                    ((MonitoredResourceDictionary)wr.Target).RecreateDynamicStyles();

                    // Update auf nein setzen
                    mrd.IsInUpdate = false;
                }
            }
        }

        /// <summary>
        /// Gibt an, ob das MonitoredResourceDictionary gerade geupdated wird
        /// </summary>
        private bool IsInUpdate { get; set; }

        /// <summary>
        /// Erneuert alle vorhandenen DynamicStyles
        /// </summary>
        private void RecreateDynamicStyles()
        {
            // Durchlaufe alle Einträge
            foreach (object key in this.Keys.Cast<object>().ToArray())
            {
                // Item Holen
                object o = this[key];

                // Wenn das Item vom Type DynamicStyle ist
                if (o.GetType() == typeof(DynamicStyle))
                {
                    // Alter Style
                    DynamicStyle oldStyle = (DynamicStyle) o;

                    // Neuer Style
                    DynamicStyle newStyle = new DynamicStyle();

                    // Eigenschaften übernehmen
                    newStyle.TargetType = oldStyle.TargetType;
                    newStyle.BaseType = oldStyle.BaseType;

                    // Setter übernehmen
                    foreach (SetterBase sb in oldStyle.Setters)
                        newStyle.Setters.Add(sb);

                    // Trigger übernehmen
                    foreach (TriggerBase tb in oldStyle.Triggers)
                        newStyle.Triggers.Add(tb);

                    // Entferne den alten Style
                    this.Remove(key);

                    // Füge den neuen Style ein
                    this.Add(key, newStyle);
                }
            }
        }

        /// <summary>
        /// Erstellt ein neues MonitoredResourceDictionary Objekt
        /// </summary>
        public MonitoredResourceDictionary()
        {
            // Inizialisierung
            this.IsInUpdate = false;

            // Wenn dem Application-Objekt noch kein StartUP-Event zugewiesenw urde
            if (!applicationIsMonitored)
            {
                // Variable setzen
                applicationIsMonitored = true;

                // Startup Event zuweisen
                Application.Current.Startup += (sender, e) =>
                    {
                        // Hole das INotifyCollectionChanged für die MergedDictionarys
                        INotifyCollectionChanged l = Application.Current.Resources.MergedDictionaries as INotifyCollectionChanged;

                        // Überwache diese
                        l.CollectionChanged += (sender2, e2) =>
                        {
                            // Löse die erneuerung der MonitoredResourceDictionary aus
                            MonitoredResourceDictionary.UpdateResources();
                        };
                    };
            }

            // Dieses Dictionary für spätere Updates in der Liste sichern
            Dicts.Add(new WeakReference(this));
        }
    }

Das MonitoredResourceDictionary bekommt nun die Änderungen von Ressourcen mit und kann daraufhin die DynamicStyles neu erstellen. Danach wird einfach der alte DynamicStyle gegen den neuen ausgetauscht. Wichtig ist, dass die DynamicStyles sich in einem MonitoredResourceDictionary befinden, damit diese bei einer Resourcenänderung gefunden und ausgetauscht werden können.

Thema: Styles - BaseOn - Dynamische Änderungen zur Laufzeit
Am im Forum: GUI: WPF und XAML

Ansich die richtige Idee. Habe es auch probiert. Leider ist DynamicResource bei der BasedOn Property nicht zulässig, da diese keine DependencyProperty ist. Selbst wenn man versucht, diese per CodeBehind zu verändert, kommt ein Fehler. Die Style-Klasse ist ISealable, und wird nach der ersten Verwendung versiegelt...

Thema: Styles - BaseOn - Dynamische Änderungen zur Laufzeit
Am im Forum: GUI: WPF und XAML

Hallo Community!

Gibt es eine Möglichkeit, Änderungen an geerbte Styles durchzureichen?

Mein Style ist wie folgt definiert:


        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="120">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
                    <Setter Property="Text" Value="Subtemplate" />
                </Style>
            </TextBox.Style>
        </TextBox>

Mein Problem ist nun, dass wenn der Style im Application.Resources Dictionary geändert wird, werden die Änderungen leider nicht an den geerbten Style durchgereicht. Gibt es eine andere Möglichkeit, einen Style zu vererben, so das auch dynamische Änderungen durchgereicht werden?

Auf Wunsch kann ich auch ein kurzes Beispielprogramm anhängen, welches das Problem darstellt.

Mit freundlichen Grüßen
Felix

Thema: SqlConnection.GetSchema wirft DuplicateNameException
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: MSSQL 2008 R2

Hallo zusammen!

Folgendes merkwürdiges Verhalten ist gerade bei mir aufgetreten:


...
SqlConnection myConnection = this.Connection;

// Funktioniert
DataTable schema = myConnection.GetSchema(); // Gibt MetaDataCollections zurück

// Funktioniert nicht mehr
DataTable tables = myConnection.GetSchema("Tables"); // Wirft eine DuplicateNameException

Währen die GetSchema-Methode ohne Parameter keinen Fehler wirft, und eine Rückgabe erzeugt (Verbindung steht also), wirft die Auflistung der Tabellen einen Fehler.

Der genaue Fehler lautet:
DuplicateNameException
Eine Spalte names 'class' gehört bereits zu dieser DataTable.

Das ganze hat vorher bereits funktioniert. Ich habe nun in den Tabellen einige ForeignKeys eingefügt. Gibt es irgendwelche bekannten Probleme mit ForeignKeys und GetSchema("Tables")?

Mit freundlichen Grüßen
Felix

Thema: Entity Framework - Connectoren?
Am im Forum: Datentechnologien

Hallo michlG,

ja ich habe die 2010 Express Version. Was mich dabei nur wundert ist, dass SQLite nachzuinstallieren war...

Muss ich mir doch mal die Trial von der Prof runterladen und es damit ausprobieren.

Danke

Thema: Entity Framework - Connectoren?
Am im Forum: Datentechnologien

Hallo erstmal!

Gibt es irgendwo eine Liste mit kostenlosen Connectoren für das Entity Framework?

Ich habe mir z.B. den MySql Connector installiert, kann diesen aber immer noch nicht mit dem EF benutzen. Das einzige was geklappt hat ist der SQLite Treiber. Auch fehlt mir eine direkte SQL Server Client Verbindung.

Wo kann ich diese beziehen?

Vielen Dank

Thema: UdpClient - Multicast - Localen IPEndPoint herausfinden?
Am im Forum: Netzwerktechnologien

Hallo Leute!

Ich habe mir eine kleine Udp-Klasse gebastelt. Diese joint einer Multicast-Gruppe.

Jetzt habe ich folgendes Problem:

Der Socket wird mit IPAdress.Any initialisiert, damit er auch wirklich auf jedem Netzwerkadapter horcht. Dadurch entsteht aber das Problem, dass wenn ich ein Packet erhalte, ich zwar den Remote IPEndPoint habe, aber nicht meinen lokalen. Gibt es eine Moeglichkeit an die IP heranzukommen, auf welcher das Paket empfangen wurde?


                UdpClient uclient = new UdpClient();

                // enable port sharing
                uclient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

                // listen on any network interface on port 1900
                uclient.Client.Bind(new IPEndPoint(IPAddress.Any, 1900));

                // join this multicast group
                uclient.JoinMulticastGroup(IPAddress.Parse("239.255.255.250"));

                // receive from ANY client!
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);

                // wait for next packet
                byte[] packet = uclient.Receive(ref endpoint);
                    
                // hier wuerde ich nun gerne meine lokale IP auslesen auf welcher das Paket empfangen wurde

Vielleicht ist es ja auch moeglich, nur die MAC-Adresse zu bekommen. Dann kann ich wenigstens den Netzwerkadapter ausfindig machen und eine IP waehlen.

Vielen Dank

Thema: XAML gestützte Lokalisierung
Am im Forum: GUI: WPF und XAML

Na klar, habs mittlerweile auch selber gebaut :)


using System;
using System.Windows.Markup;


// Register this namespace for easy usage
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "Localization")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2007/xaml/presentation", "Localization")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2008/xaml/presentation", "Localization")]

namespace Localization
{
    [MarkupExtensionReturnType(typeof(string))]
    public class Loc : MarkupExtension
    {
        public String Key
        {
            get;
            set;
        }

        public Loc()
        {
            this.Key = "";
        }

        public Loc(String key)
        {
            this.Key = key;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            // return the value via static method
            return GetValue(Key);
        }

        public static string GetValue(string key)
        {
            // return value
            return "Dein Key lautet " + key;
        }


    }
}

Das ganze kannst du natürlich auch für MessageBoxen im CodeBehind nutzen. Einfach Loc.GetValue("Dein Key") nutzen!

Thema: UniformGrid, ItemsControl und Rows/Columns?
Am im Forum: GUI: WPF und XAML

Habe es jetzt anders geloest. Habe einfach eine neue Klasse erstellt Namens UniformItemsControl.


    public class UniformItemsControl : ItemsControl
    {
        #region Columns
        public static readonly DependencyProperty ColumnsProperty = DependencyProperty.Register("Columns", typeof(int), typeof(UniformItemsControl), new PropertyMetadata(new PropertyChangedCallback(ColumnsChanged)));

        public int Columns
        {
            get { return (int)GetValue(ColumnsProperty); }
            set { SetValue(ColumnsProperty, value); }
        }

        private static void ColumnsChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            // update the itemspanel
            UniformItemsControl uic = ((UniformItemsControl)sender);
            uic.RefreshItemsPanel(uic.Rows, (int)e.NewValue);
        }
        #endregion

        #region Rows
        public static readonly DependencyProperty RowsProperty = DependencyProperty.Register("Rows", typeof(int), typeof(UniformItemsControl), new PropertyMetadata(new PropertyChangedCallback(RowsChanged)));

        public int Rows
        {
            get { return (int)GetValue(RowsProperty); }
            set { SetValue(RowsProperty, value); }
        }

        private static void RowsChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            // update the itemspanel
            UniformItemsControl uic = ((UniformItemsControl)sender);
            uic.RefreshItemsPanel((int)e.NewValue, uic.Columns);
        }
        #endregion

        /// <summary>
        /// update the itemspanel to the current configuration
        /// </summary>
        /// <param name="Rows"></param>
        /// <param name="Columns"></param>
        private void RefreshItemsPanel(int Rows, int Columns)
        {
            // make a new uniformgrid, as the old will be sealed properly
            FrameworkElementFactory fef = new FrameworkElementFactory(typeof(UniformGrid));

            // set values
            fef.SetValue(UniformGrid.RowsProperty, Rows);
            fef.SetValue(UniformGrid.ColumnsProperty, Columns);
            
            // create the template
            ItemsPanelTemplate ipt = new ItemsPanelTemplate();
            ipt.VisualTree = fef;

            // set the template
            this.ItemsPanel = ipt;
        }

        /// <summary>
        /// constructor
        /// </summary>
        public UniformItemsControl()
            : base()
        {
            this.RefreshItemsPanel(this.Rows, this.Columns);
        }
    }

Nutzen kann man diese sehr simpel!

<fw:UniformItemsControl Rows="{TemplateBinding Rows}" Columns="{TemplateBinding Columns}" ItemsSource="{TemplateBinding DayItems}" />

Damit klappts :)

Noch zur Info: Das ganze wird fuer einen Kalender verwendet. Die Ansicht soll man schnell zwischen Woche und Monat wechseln koennen. Also einfach die Rows z.B. anpassen.

Thema: UniformGrid, ItemsControl und Rows/Columns?
Am im Forum: GUI: WPF und XAML

Guten Abend liebe Community!

Ich habe ein Problem mit einem ControlTemplate. Ich habe eine Klasse erstellt (Calendar) welche 3 DependencyProperties besitzt. Rows (int), Columns (int) sowie DayItems. Ich möchte nun die DayItems in einem UniformGrid anzeigen, welches jeweils soviele Spalten/Zeilen hat, wie in der Klasse angegeben. Mein Template sieht soweit nun so aus:


        <Style TargetType="{x:Type fw:Calendar}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type fw:Calendar}">
                        <ItemsControl ItemsSource="{TemplateBinding DayItems}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid Rows="3" Columns="1"></UniformGrid>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                        </ItemsControl>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Nur wie kann ich nun aus dem ItemsPanelTemplate auf die eigentliche Klasse Calendar zugreifen? Habe schon alles versucht und weiss leider nicht mehr weiter. Ein RelativeSource funktioniert leider nicht, das ItemsPanel scheint keinen Parent gesetzt zu bekommen...

Hat Jemand eine Idee? :)

Vielen Dank

Thema: SQL Compact Tabelleninhalt bearbeiten
Am im Forum: Datentechnologien

Also eine SQLCE Db konnte ich sogar aus Visual Studio bearbeiten. Einfach unter Tools auf "Connect to Database" gehen...

Thema: Rechnen mit Double = Ergebnis falsch!
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ok stell ich auf Decimal um ;)

Was mich nur wundert, soweit ich in der FAQ gelesen habe, tritt diesem Problem eher beim Umrechnen in das Dezimalsystem auf. Ich hab eine Lange For-Schleife mit mehreren Berechnungen drinne, und das Problem tritt dort trotzdem an mehreren Stellen auf.

Nunja egal, nehm ich halt Decimal ;)

Besten Dank

//Edit
Hat sich erledigt hab nochmal genau nachgelesen ;)

Thema: Rechnen mit Double = Ergebnis falsch!
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich habe ein Problem mit der Berechnung mittels Double-Variablen.

Das gleiche passiert bei mir übrigends auch, wenn ich die Formel so in der Watchliste eingebe.


double a = 750.0;
double b = 1232.64;
double c = a - b;

Als Ergebnis bekomme ich nun -482.6400000000001. Ich weiss das ich einen Round draufsetzten kann, aber eigentlich sollte doch eine rundes Ergebnis dabei herauskommen...

Ich verwende .NET 3.5 Framework mit VS 2010 Beta.

Kennt vielleicht jemand dieses Phänomen?

Danke bereits im Vorraus ;)

Thema: Lokalisierung mit Plugins
Am im Forum: GUI: WPF und XAML

Mein MUIManager ist über einen Singleton global verfügbar. Einbinden tue ich das ganze z.B. mit diesem Codeblock:

Text="{Binding Source={x:Static fb:MUIManager.GetInstance}, Path=[sqlsetup_salutation]}"

Der ließt mir aus den XML-Dateien die SQL-Setup Begrüßung aus. Leider etwas umständlich, aber ich habe bis heute keine bessere Lösung gefunden, um das ganze auch pluginübergreifend zu verwenden...

Thema: Lokalisierung mit Plugins
Am im Forum: GUI: WPF und XAML

Genau so habe ich es im Moment auch gelöst. Ein MUIManager, welcher XML-Dateien parst und die Werte dann ich ein Dicitonary übernimmt. Jedes Plugin kann XML-Dateien in den MUIManager laden, welche dieser dann parst. Das Dictionary wird über ein normales Binding in die Masken intigriert. Eine andere Lösung ist mir bis jetzt noch nicht in den Sinn gekommen...

Thema: XAML gestützte Lokalisierung
Am im Forum: GUI: WPF und XAML

Also mich würde die Lösung via

<TextBlock Text="{Loc key_string}"/>
doch eher interessieren, da ich auch Plugins verwende ;)

Thema: Linq2MySQL - Was haltet ihr davon?
Am im Forum: Datentechnologien

Das lässt für mich nur den Schluss übrig, dass es viele Technologien gibt, aber keine wirklich das A&O ist. Mal ist dies, mal ist das besser. Schade eigentlich. Da werd ich mir doch mal alles anschauen müssen, um zu entscheiden was für mich so am besten einzusetzen ist.

Vielen Dank

Thema: Linq2MySQL - Was haltet ihr davon?
Am im Forum: Datentechnologien

Zitat von michlG
Ich selbst habe in einem Projekt auch schon Linq verwendet. Das funktioniert für etwas Einfaches auch sehr gut, aber wenn man etwas komplexes aufbauen will, so kommt man doch relativ schnell an die Grenzen von LINQ.

Hast du dafür mal ein Beispiel? Ich wüsste so aus dem Stehgreif nichts...

Thema: Linq2MySQL - Was haltet ihr davon?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: mysql / mssql

Da ich das DBML Schema des linq2sql sehr gut fand, und mir bereits ein Datenbankmodul zum Erstellen der Datenbank eingeladen via Modulen (Jedes Modul hat seine eigene Datenbank und kann diese an das DB-Objekt übergeben), wollte ich dies natürlich weiter benutzen. Folgendes kam dabei heraus und ich wollte mal fragen was Ihr davon haltet. Das Beispielprojekt legt euch eine Einstellungsdatei an. Diese findet Ihr unter: Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\fwsoftware_settings.xml".

So nun zum Linq2MySQL.
Ich habe ein Beispielprojekt angehängt, in dem alles drin ist. Dort funktioniert der Zugriff auf MySQL genauso wie auf MsSQL. Alles was Ihr benötigt ist der MySQL-Net Connector. Die Tabellen müsst ihr eben per Hand erstellen, ich habe ein Skript in das Archiv gepackt, welches dies für euch tut.

Der Vorteil dieser Methode ist für mich, dass ich mit meinem Datenbank-Objekt (nicht in der Demo enthalten, daher das Skript zum Erstellen) eben alles sofort erstellen kann, auch Modulübergreifend (Ich verwende das Datenbank-Object in allen Modulen), und somit sehr effektiv arbeiten kann.

Gibt es bessere Lösungsansätze?

Mit freundlichen Grüßen
Felix

Thema: WPF + Silverlight Toolkit Themes
Am im Forum: GUI: WPF und XAML

Hehe ok das erklärt warum auf einmal mein Fenster leer ist...

Trotzdem Danke ich werde das Projekt so weiter beobachten. Ist leider so jetzt noch nicht einsetzbar, weil wird nicht in Frames vererbt. Da ich im Moment auf Modulen mit vielen Pages + Frames arbeite ist es so leider nicht brauchbar für mich :(

Naja ich werds weiter beobachten. Vielleicht gehts später ja mal ;)

Thema: WPF + Silverlight Toolkit Themes
Am im Forum: GUI: WPF und XAML

Kann es sein, dass es noch Probleme bei TabControls & Frames gibt?

Thema: WPF + Silverlight Toolkit Themes
Am im Forum: GUI: WPF und XAML

Vielen Dank!

Kann ich das ganze auch in kommerziellen Projekten verwenden?

...

Einmal für alle die es nicht hinbekommen:
Ihr müsst damit das Beispielprojekt funktioniert erst das WPFToolkit installieren. Dies findet ihr unter http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=15598

Thema: neues fenster
Am im Forum: GUI: WPF und XAML

Wenn du das direkt in einer Methode verwendest, könntest du es in etwa wie folgt aufbauen:


            if (password.Text != "password")
            {
                MessageBox.Show("Das Passwort stimmt nicht!");
                return;
            }

            // Weiterer Code!

Das könntest du z.B. in deine Main-Methode schreiben. Sobald das return erreicht wird, bricht das Programm dann ab. Sollte das Passwort stimmen, wird der weitere Code aufgerufen. Dort könntest du z.B. mit


MeineForm form = new MeineForm();
form.ShowModal();

deine Maske anzeigen lassen.