Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将大型XAML文件分解为子XAML文件,并保持父对象和子对象之间的通信?_Wpf_Xaml - Fatal编程技术网

Wpf 如何将大型XAML文件分解为子XAML文件,并保持父对象和子对象之间的通信?

Wpf 如何将大型XAML文件分解为子XAML文件,并保持父对象和子对象之间的通信?,wpf,xaml,Wpf,Xaml,我是WPF的新手。我正试图修改《WPF 4释放》一书中的VisualStudioLikePanes项目。因为在运行项目之前,默认情况下窗格是隐藏的,所以我决定最好将我正在处理的窗格放在一个单独的xaml文件中,这样我就可以看到我对窗格所做的更改,而无需启动可执行文件 因此,根据几天前我在StackOverflow上读到的一些帖子,我在示例项目中添加了一个新的UserControl,并将相关窗格的内容插入其中。下面是“child”XAML文件中UserControl属性的外观: <UserC

我是WPF的新手。我正试图修改《WPF 4释放》一书中的VisualStudioLikePanes项目。因为在运行项目之前,默认情况下窗格是隐藏的,所以我决定最好将我正在处理的窗格放在一个单独的xaml文件中,这样我就可以看到我对窗格所做的更改,而无需启动可执行文件

因此,根据几天前我在StackOverflow上读到的一些帖子,我在示例项目中添加了一个新的UserControl,并将相关窗格的内容插入其中。下面是“child”XAML文件中UserControl属性的外观:

<UserControl x:Class="Sample.SettingsPanel"
         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">
<Window
    Title="MainWindow"
    x:Uid="Window_1" x:Class="Sample.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sp="clr-namespace:Sample"
    x:Name="window">

为了将此控件包含到父级中,我将xmlns:sp命名空间添加到“父级”XAML文件中:

<UserControl x:Class="Sample.SettingsPanel"
         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">
<Window
    Title="MainWindow"
    x:Uid="Window_1" x:Class="Sample.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sp="clr-namespace:Sample"
    x:Name="window">

然后,我通过以下方式“包括”控件:

<sp:SettingsPanel Visibility="Collapsed" x:Name="layer1" x:FieldModifier="private" />

我立即发现,在'parent'XAML文件的代码隐藏文件中,所有引用现在包含在'child'XAML文件中的任何元素的代码现在都无法识别。因此,我随后删除了(或注释掉)所有对名称和对象的引用,这些名称和对象现在包含在“child”XAML文件中,从那时起,它们就一直在跳转,以便将内容连接起来

例如,我希望在'child'XAML文件中有一个文本框来反映'parent'XAML文件中文本框中的内容。我相信下面的绑定会起作用,但是,当然,我不能将其放入“child”XAML中,因为它不再“知道”父级的“test”元素

<TextBox Text="{Binding ElementName=test, Path=Text}" />

我确信我错误地分解了“父”XAML文件。我无法想象,每当有人想要将XAML的某些部分分解成另一个文件时,他们必须重新编写所有的代码,并设置特殊的通信黑客,让元素继续通信

我确实看了很多帖子(如和),但它们没有回答我的特定问题

谢谢


Matt

当您将元素拆分为用户控件时,您仍然可以通过提供的x:Name字段值访问它们。然而,由于您是WPF新手,在您养成任何“坏习惯”之前,我将开始研究MVVM模式。它特别解决了您的问题。

如果您想让XML(XAML是XML的一种类型)做它所做的事情(例如引用),那么您需要让它保持灵活。这是一件事,打破不耦合的片段,但父母和孩子是一个非常紧密的耦合。