2016-12-13 7 views
0

У меня есть приложение, сделанное в .NET 4.5 для новых ПК, но теперь у меня есть клиенты Windows XP:/поэтому я должен вернуться, я успешно вернулся в .net 4 для Windows XP, все работает отлично на Windows 7> Windows 10. Но есть некоторые серьезные проблемы с обработкой контента, с которыми я столкнулся в Windows XP, теперь, прежде чем я спросил здесь, я искал Google и здесь, чтобы найти решение. Но пока не повезло. Это проблема, У меня есть MainWindow и Window1 (пример), в главном окне содержится красная эмблема, кнопка и контент-контроль (в настоящее время нулевой, поэтому его невидимый), и при нажатии кнопки у меня есть эта строка:Оформление содержимого Windows XP

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

Window 1 background установлен на красный цвет, поэтому он просто меняет фон, который работает на моей машине (окна 10), но одно и то же приложение падает на win xp, просматривает фотографии. Есть идеи? (все мое приложение сделано для изменения окон с помощью .Content, поэтому я должен как-то исправить рисунок содержимого контента, любые идеи, что попробовать?).

windows 10 before button clicked

windows 10 after button clicked

Windows XP before button clicked

Windows XP after button clicked

Обновление: Я сожалею, что я не включил исключение:

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

. enter image description here

После редактирования: это на нажатие кнопки:

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

и XAML из UserControl: enter image description here

бонус вопрос :: , поскольку мое приложение довольно большой, и везде я использовал окно, теперь мне нужно переключиться на пользовательский контроль, чтобы эти методы работали ... поскольку если я переключу

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

в

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

снова выскакивает исключение ... какой-нибудь способ это исправить ... если нет .. я изменю окно для пользовательских элементов управления не проблемы ...

enter image description here

и один большое спасибо сэра «MM8» для фиксации моей проблемы :))

+0

ваших клиенты имеют веские причины не обновляет XP? ОС - динозавр, и поддержка была вытащена. – Takarii

+0

Поверь мне, я сказал, что .. но они говорят, что у них слишком много компьютеров, использующих XP прямо сейчас ... так что, как им принудительно .. мы устанавливаем программное обеспечение на многих компьютерах .. не только один .. так что я своего рода вынужден. .. даже tho мне это не понравилось .. но ... – ShadyOverflow

+0

Итак, я ясно, Window1 литром «заполняет» MainWindow, когда он называется? – Takarii

ответ

1

Вы можете переместить Содержание window1 в UserControl:

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

Вы можете просто создать экземпляр этого UserControl и установить Content свойство ContentPresenter в вашей MainWindow к этому один:

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

только что пробовал это, работает на win 10, он бросает то же исключение на win xp. – ShadyOverflow

+0

Как выглядит разметка XAML и код для UserControl1? – mm8

+0

Я отредактировал вопрос, есть новый pic, btw У меня нет никакого кода в usercontrol1, кроме значения по умолчанию (initialize component ..) – ShadyOverflow

0

Это то, что вы должны использовать ContentPresenter для.

Обновите 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-событие/фоновый код:

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

да это работает, первый ответ работает одинаково, кроме i didnt использовал его правильно .., в чем же разница между contentControl и контент-презентатором? любые идеи, почему я должен переключиться на него? – ShadyOverflow

+0

ContentControl используется для элементов управления, отображающих «контент», а ContentPresenter используется для отображения содержимого «элементов управления». На мой взгляд, немного проще иметь ContentPresenter, а затем обновлять ContentPresenter динамическими данными, так как более очевидно и понятно, что происходит. –