2016-12-13 4 views
0

Ich habe eine Anwendung in .NET 4.5 für neuere PCs gemacht, aber jetzt habe ich ein Windows XP-Clients:/So muss ich zurück, ich kehrte erfolgreich zu. Net 4 für Windows XP, alles funktioniert perfekt unter Windows 7> Windows 10. Aber es gibt einige schwerwiegende Probleme beim Rendern von Inhalten, die ich in Windows XP hatte, jetzt, bevor ich hier fragte, suchte ich in Google und hier nach einer Lösung. Aber bisher kein Glück. Das ist das Problem, Ich habe MainWindow und Window1 (Beispiel), Hauptfenster enthält einige rot-Hintergrund-Label, Button und ein contentcontrol (derzeit Null, so dass es unsichtbar ist), und auf Knopfdruck, habe ich diese Zeile:Windows XP Inhalt Rendern

Fenster 1 Hintergrund ist auf rote Farbe eingestellt, so dass es nur den Hintergrund ändert, die auf meinem Computer funktioniert (Windows 10), aber die gleiche App abstürzt auf Win XP, schauen Sie sich die Bilder an. Irgendwelche Ideen? (meine ganze Anwendung wurde gemacht, um Fenster mit .Content zu ändern, also muss ich irgendwie die Zeichnung von chasing Inhalt reparieren, irgendwelche Ideen was auszuprobieren?).

windows 10 before button clicked

windows 10 after button clicked

Windows XP before button clicked

Windows XP after button clicked

Update: Ich bin traurig, dass ich nicht die Ausnahme enthalten hat:

Specified element is already the logical child of another element. Disconnect it first. 

. enter image description here

Nach edit: dies auf die Schaltfläche klicken:

this.contentControl.Content = new UserControl1().Content; 

und XAML von Usercontrol: enter image description here

Frage Bonus :: da meine Anwendung ist ziemlich groß, und überall dort eingesetzt i Fenster, jetzt muss ich auf Benutzersteuerung für diese Methoden zu arbeiten, um ... zu arbeiten, da, wenn ich

this.contentControl.Content = new UserControl() { Background = Brushes.Green }; 
wechseln

zu

this.contentControl.Content = new Window() { Background = Brushes.Green }; 

erneut Ausnahme erscheint ... eine Möglichkeit, dieses Problem zu beheben ... wenn es nicht der Fall ist .. Ich werde die Fenster Bedienelemente kein Problem ändern ...

enter image description here

und ein großer dank an Sir "mm8" mein Problem für die Befestigung :))

+0

Haben Ihre Kunden aus gutem Grund haben nicht von XP Upgrade? Das Betriebssystem ist ein Dinosaurier und Unterstützung wurde gezogen. – Takarii

+0

vertrauen Sie mir, ich sagte das .. aber sie sagen, sie haben zu viele Computer mit XP jetzt ... so ist es im erzwungen .. wir installieren die Software auf vielen Computern .. nicht nur einer .. so im irgendwie gezwungen. .. sogar tho ich mochte es nicht .. aber ... – ShadyOverflow

+0

So im klaren, "füllt" Window1 buchstäblich MainWindow, wenn es aufgerufen wird? – Takarii

Antwort

1

Sie könnten den Inhalt des Window1 zu einem Usercontrol bewegen:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication1" 
    mc:Ignorable="d" 
    Title="Window8" Height="300" Width="300"> 
<Grid> 
    <local:UserControl1 /> 
</Grid> 

Sie können in Ihrem Hauptfenster auf das man dann einfach eine Instanz dieses Usercontrol erstellen und die Content-Eigenschaft des Content gesetzt:

this.contentControl.Content = new UserControl1(); 
+0

gerade versucht dies, arbeitet auf Gewinn 10, wirft es die gleiche Ausnahme auf Gewinn xp. – ShadyOverflow

+0

Wie sieht das XAML-Markup und der Code für UserControl1 dann aus? – mm8

+0

Ich habe die Frage bearbeitet, es gibt ein neues Bild, btw ich habe keinen Code in usercontrol1 mit Ausnahme der Standard (Komponente initialisieren ..) – ShadyOverflow

0

Dies ist, was Sie sollten eine ContentPresenter verwenden zum.

Aktualisieren Sie Ihre Mainwindow:

<Window x:Class="WpfApplication9.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ContentPresenter x:Name="ContentPresenter"/> 
     <Label Content="yoooooo"/> 
     <Button Height="50" Width="75" Click="Button_Click"/> 
    </Grid> 
</Window> 

Click-Ereignis/code-behind:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var newControlContent = new ContentControl 
    { 
     Content = new UserControl1() 
    }; 
    ContentPresenter.Content = newControlContent; 
} 

Usercontrol:

<UserControl x:Class="WpfApplication9.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid Background="PaleVioletRed"> 

    </Grid> 
</UserControl> 
+0

ja das funktioniert, die erste Antwort funktioniert auf die gleiche Weise, außer ich habe es nicht richtig benutzt .., was genau ist der Unterschied zwischen ContentControl und Content Presenter? Irgendwelche Ideen warum sollte ich darauf wechseln? – ShadyOverflow

+0

Das ContentControl wird für Steuerelemente verwendet, die "Inhalt" anzeigen, und ein ContentPresenter wird verwendet, um den Inhalt von Steuerelementen anzuzeigen. Meiner Meinung nach ist es ein bisschen sauberer, einen ContentPresenter zu haben, und dann den ContentPresenter mit dynamischen Daten zu aktualisieren, da es offensichtlicher ist und klarstellt, was vor sich geht. –