Слияние файлов xaml с использованием словарей ресурсов - PullRequest
0 голосов
/ 28 января 2019

Информация о слиянии двух файлов 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>

После Как я могу объединить несколько файлов XAML, используя C # в 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 также должны быть / вести себя как словари?Я обновил свой код, но я не вижу списков по-прежнему отображаются

1 Ответ

0 голосов
/ 29 января 2019

Я не уверен, что то, что вы пытаетесь сделать, возможно с помощью словаря ресурсов.Словарь ресурсов - это именно то, что представляет собой список ресурсов для вашего XAML, так что вы можете определить там стили или шаблоны и т. Д. Затем на них ссылается ваш XAML, использующий ресурс.Я никогда не пытался определять элементы в одном, но я не думаю, что вы можете инициализировать сетку с ним (что, я думаю, вы пытаетесь сделать?).

Редактировать:

Перечитывание исходного сообщения в сочетании с комментарием. Я не думаю, что вам нужны словари ресурсов для этого вообще.То, что вы хотите, это отдельный пользовательский элемент управления.Вы можете найти информацию об этом здесь , но в качестве краткого примера я создал проект 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>

Это обеспечивает разделение между элементами, которых, я думаю, вы пытаетесь достичь.Таким образом, это должно позволить вам составить представление нескольких пользовательских элементов управления, где каждый элемент управления является набором элементов управления (возможно, других пользовательских элементов управления, но это может привести к путанице).Это также может быть достигнуто с помощью шаблонов данных, как описано здесь , где вы можете видеть, что содержимое изменяется в зависимости от того, какой шаблон применим.Вы можете определить шаблоны в своем словаре ресурсов и ссылаться на них таким образом.Я думаю, что на это также может быть полезно сослаться, поскольку, хотя оно и не имеет прямого отношения к вашему вопросу, оно описывает различные способы сегментирования контента в вашем приложении и содержит некоторые соответствующие обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...