gpt4 book ai didi

c# - 使用资源字典合并 xaml 文件

转载 作者:行者123 更新时间:2023-11-30 17:27:49 24 4
gpt4 key购买 nike

关于合并两个 XAML 文件的信息有点令人困惑,有人可以指出正确的方向吗? (W10, VS2017, UAP, Midi)

我有 app.xamlMainPage.xamlA.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 又名 (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 也必须/像字典一样工作?我已经更新了我的代码,但我仍然没有看到列表框出现

最佳答案

我不确定您尝试使用资源字典是否可行。资源字典就是这样,它是 XAML 资源的列表,因此您可以在其中定义样式或模板等。然后,使用该资源的 XAML 会引用这些内容。我从来没有尝试过在其中定义元素,但我认为您不能用它来初始化网格(我认为您正在尝试这样做?)。

编辑:

结合评论重新阅读您的原始帖子,我认为您根本不需要资源词典。你想要的是一个单独的用户控件。您可以找到关于此的信息 here但作为一个简短的例子,我创建了一个 WPF 项目并添加了 2 个用户控件,1 个包含一个列表,一个包含一个按钮。

主窗口.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>

这实现了我认为您正在尝试实现的元素之间的分离。因此,这应该允许您组成多个用户控件的 View ,其中每个控件都是控件的集合(可能是其他用户控件,但这可能会变得困惑)。这也可以使用描述的数据模板来实现 here您可以在其中看到内容正在根据适用的模板进行更改。您可以在资源字典中定义模板并以这种方式引用它们。我想this也可能值得引用,因为虽然与您的问题没有直接关系,但它概述了您可以在应用程序中分割内容的各种方式并进行了一些相关讨论。

关于c# - 使用资源字典合并 xaml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com