Windows XP内容呈现

时间:2016-12-13 14:54:29

标签: c# wpf graphics rendering windows-xp

我有一个用于新版PC的.NET 4.5应用程序,但现在我有一个Windows XP客户端:/所以我要恢复,我成功恢复到.net 4 for Windows XP,一切运行完美在Windows 7上> Windows 10.但是我在Windows XP中遇到了一些严重的内容呈现问题,现在我在这里问过之前,我搜索了Google并在这里找到了解决方案。但到目前为止没有运气。这就是问题, 我有MainWindow和Window1(示例),主窗口包含一些红色背景标签,按钮和一个contentcontrol(当前为null,因此它不可见),点击按钮,我有这一行:

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

窗口1背景设置为红色,因此它只是更改背景,这可以在我的机器上运行(Windows 10),但同样的应用程序在win xp上崩溃,查看图片。有任何想法吗? (我的整个应用程序是使用.Content更改窗口所以我必须以某种方式修复chaging内容的绘制,任何想法尝试什么?)。

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;

和usercontrol的xaml: 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"解决我的问题:))

2 个答案:

答案 0 :(得分: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的实例,并将MainWindow中ContentPresenter的Content属性设置为:

this.contentControl.Content = new UserControl1();

答案 1 :(得分:0)

这是你应该使用ContentPresenter for。

更新您的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>

点击事件/代码隐藏:

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

用户控件:

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