Wpf 如何将大型XAML文件分解为子XAML文件,并保持父对象和子对象之间的通信?
我是WPF的新手。我正试图修改《WPF 4释放》一书中的VisualStudioLikePanes项目。因为在运行项目之前,默认情况下窗格是隐藏的,所以我决定最好将我正在处理的窗格放在一个单独的xaml文件中,这样我就可以看到我对窗格所做的更改,而无需启动可执行文件 因此,根据几天前我在StackOverflow上读到的一些帖子,我在示例项目中添加了一个新的UserControl,并将相关窗格的内容插入其中。下面是“child”XAML文件中UserControl属性的外观:Wpf 如何将大型XAML文件分解为子XAML文件,并保持父对象和子对象之间的通信?,wpf,xaml,Wpf,Xaml,我是WPF的新手。我正试图修改《WPF 4释放》一书中的VisualStudioLikePanes项目。因为在运行项目之前,默认情况下窗格是隐藏的,所以我决定最好将我正在处理的窗格放在一个单独的xaml文件中,这样我就可以看到我对窗格所做的更改,而无需启动可执行文件 因此,根据几天前我在StackOverflow上读到的一些帖子,我在示例项目中添加了一个新的UserControl,并将相关窗格的内容插入其中。下面是“child”XAML文件中UserControl属性的外观: <UserC
<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的一种类型)做它所做的事情(例如引用),那么您需要让它保持灵活。这是一件事,打破不耦合的片段,但父母和孩子是一个非常紧密的耦合。