关于合并两个XAML文件的信息有点令人困惑,有人可以向我指出正确的方向吗? (W10,VS2017,UAP,Midi)
我有app.xaml
,MainPage.xaml
和A.xaml
。我也有一个xaml资源字典。我想将A.xaml
插入MainPage.xaml
中。
(A实际上称为MidiWrapper.xaml
)
app.xaml
<Application
x:Class="Kawai_ES110_Midi.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Application>
在How can i combine multiple XAML files using C# in WPF?之后,当我将第一个解决方案放入app.xaml时遇到访问冲突
MainPage.xaml
<Page
x:Class="Kawai_ES110_Midi.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Kawai_ES110_Midi"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="XAMLWrapper.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
</Grid>
</Page>
A.xaml(又名MidiWrapper.xaml
)
<ResourceDictionary
x:Class="Kawai_ES110_Midi.MidiWrapper"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Kawai_ES110_Midi"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListBox x:Name="midiInPortListBox"/>
<ListBox x:Name="midiOutPortListBox"/>
</ResourceDictionary>
资源字典xaml aka(XAMLWrapper.xaml
)
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Application>
非常感谢您的帮助。也许app.xaml需要引用资源字典和/或将“合并的”标签放入MainPage和A。或者MainPage和A也必须像词典一样/作用? 我已经更新了代码,但看不到列表框仍然显示
答案 0 :(得分:1)
我不确定您尝试使用资源字典执行的操作是否可行。资源字典就是这样,它是XAML的资源清单,因此您可以在其中定义样式或模板等。然后,使用资源的XAML会引用这些样式。我从未尝试在一个元素中定义元素,但我认为您无法使用它初始化一个网格(这是我想您要尝试做的事情?)。
编辑:
重新阅读原始文章以及评论,我认为您根本不需要资源词典。您想要的是一个单独的用户控件。您可以在此here上找到信息,但作为一个简短示例,我创建了一个WPF项目并添加了2个用户控件,其中1个控件包含一个列表,而一个控件包含一个按钮。
Mainwindow.xaml
<Window x:Class="test.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"
xmlns:local="clr-namespace:test"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<local:ListUserControl Grid.Column="0" Grid.Row="0"/>
<local:ButtonUserControl Grid.Column="0" Grid.Row="1"/>
</Grid>
</Window>
ListUserControl.xaml
<UserControl x:Class="test.ListUserControl"
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"
xmlns:local="clr-namespace:test"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" Background="White">
<StackPanel>
<ListBox>
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
</ListBox>
</StackPanel>
</UserControl>
ButtonUserControl.xaml
<UserControl x:Class="test.ButtonUserControl"
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"
xmlns:local="clr-namespace:test"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" Background="DarkRed">
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="10,10,10,10" VerticalAlignment="Top" Width="75"/>
</Grid>
</UserControl>
这实现了我认为您要实现的元素之间的分离。因此,这应该使您可以构成几个用户控件的视图,其中每个控件都是控件的集合(可能是其他用户控件,但这可能会变得凌乱)。这也可以使用here中所述的数据模板来实现,您可以在其中看到内容根据适用的模板进行了更改。您可以在资源字典中定义模板并以这种方式引用它们。我认为this也可能值得一提,因为它虽然与您的问题没有直接关系,但它概述了可以在应用程序中细分内容的各种方式,并进行了一些相关的讨论。