В настоящее время я пытаюсь централизовать несколько элементов, которые планирую использовать в нескольких местах моего приложения. Например, у меня есть всплывающее окно, которое служит меню навигации в части приложения, но проблема, с которой я сталкиваюсь, заключается в том, что я не могу установить событие «Click» в ресурсах приложения, где я определяю его в App.xaml
<Application.Resources>
<Flyout x:Key="guided_tour_nav">
<StackPanel>
<Button x:Name="home" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Return to Home" Click="home_button_Click"/>
<Button x:Name="water" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="The Water Enters"/>
<Button x:Name="eggs" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Eggs Arrive"/>
<Button x:Name="pre_hatch" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Pre-Hatching"/>
<Button x:Name="tanks" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="The Tanks"/>
<Button x:Name="life_support" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Life Support"/>
<Button x:Name="waste" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Filtering Waste"/>
<Button x:Name="release" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="The Release"/>
</StackPanel>
</Flyout>
</Application.Resources>
Я использую это в моем mainpage.xaml, и несколько других страниц
<Button Flyout="{StaticResource guided_tour_nav}" Content="Jump to Section"/>
Я сейчас получаю ошибку
WMC1005 Events cannot be set in the Application class XAML file
Я хотел бы иметь возможность определять весь элемент, события кликов и все, на которые можно ссылаться, где бы я ни нуждался, без необходимости переопределять события кликов для каждой страницы. Я предполагаю, что это должно быть как-то возможно, но я совершенно новичок в платформе UWP.
Когда вы создаете Flyout
как ресурс в Application.Resources
Вы не можете использовать его с событиями, к сожалению.
Однако есть два альтернативных решения.
Вы можете обернуть Flyout в пользовательский элемент управления XAML, а затем легко использовать его в любом месте.
Щелкните правой кнопкой мыши ваш проект UWP в Обозреватель решений и выберите добавлять — Новый предмет …. В диалоговом окне выберите XAML раздел и там найти Пользовательский контроль вариант. Выберите желаемое имя (например, GuidedTourNav
) и нажмите добавлять.
Это создает три файла — GuidedTourNavFlyout.xaml
, GuidedTourNavFlyout.xaml.h
а также GuidedTourNavFlyout.xaml.cpp
, Тип по умолчанию пользовательских элементов управления XAML UserControl
, Вы должны изменить это. Открой GuidedTourNavFlyout.xaml
файл и изменить корневой элемент из UserControl
в Flyout
:
<Flyout
x:Class="xxxxxx"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="xxxxxxx"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d">
</Flyout>
Наконец, замените Grid
внутри GuidedTourNavFlyout.xaml
код с содержимым всплывающей подсказки и, как обычно, создайте нужный обработчик событий в коде.
Теперь вы можете использовать свой собственный всплывающее окно в любом месте. Сначала добавьте объявление пространства имен XML в корневой элемент вашей страницы. замещать MyApp.CustomControls
с пространством имен, где лежит ваш пользовательский элемент управления.
xmlns:controls="using:MyApp.CustomControls"
И теперь вы можете использовать всплывающую подсказку в любом месте, используя сложное свойство:
<Button Content="Hello">
<Button.Flyout>
<controls:GuidedTourNavFlyout />
</Button.Flyout>
</Button>
Альтернативным решением было бы создать словарь ресурсов с выделенным кодом как описано здесь. Однако этот подход кажется менее чистым, и я не могу подтвердить, что он работает в C ++.
Других решений пока нет …