Я понимаю, что это исключение возникает, когда этап переходит в режим скрытия, а компонент уведомления не может найти этап, когда уведомление должно отображаться на этапе. После поиска в Интернете я нахожу два решения этой проблемы.
Решение 1:
Откройте сцену и покажите уведомление. Таким образом, мы должны проверить, что если сцена была скрыта, откройте ее и покажите уведомление. Чтобы сделать это, мы должны добавить это условие в метод CreateNotification:
Stage stage = (Stage) button.getScene().getWindow();
if (!stage.isShowing()){
stage.show();
}
Решение 2:
В этом решении мы создаем фиктивный этап и устанавливаем его непрозрачность в ноль, а затем, скрыть основную сцену. Я нахожу это решение по этой ссылке и помещаю код в здесь :
public void createDummyStage() {
Stage dummyPopup = new Stage();
dummyPopup.initModality(Modality.NONE);
// set as utility so no iconification occurs
dummyPopup.initStyle(StageStyle.UTILITY);
// set opacity so the window cannot be seen
dummyPopup.setOpacity(0d);
// not necessary, but this will move the dummy stage off the screen
final Screen screen = Screen.getPrimary();
final Rectangle2D bounds = screen.getVisualBounds();
dummyPopup.setX(bounds.getMaxX());
dummyPopup.setY(bounds.getMaxY());
// create/add a transparent scene
final Group root = new Group();
dummyPopup.setScene(new Scene(root, 1d, 1d, Color.TRANSPARENT));
// show the dummy stage
dummyPopup.show();
}
Как я уже упоминал ниже, мы должны вызвать этот метод, прежде чем скрыть основную сцену:
@FXML
public void handleSysTryAction(ActionEvent event) {
Stage stage = (Stage) button.getScene().getWindow();
createDummyStage();
stage.hide();
}
Я реализую это два решения, и все работает хорошо. Если у вас есть лучшее решение для этой проблемы, пожалуйста, поставьте здесь
Вы можете загрузить весь проект Netbeans из моего Dropbox
При поиске хорошего начала можно использовать основу кода, предоставленного проект SharpMap, и создать из там. Если я вспоминаю, что было несколько человек, уже работающих над рендерером WPF для SharpMap, таким образом, у Вас может также быть некоторый код для начала.
я лично использовал SharpMap в приложении C# 2.0, которое объединило данные GIS с оперативными данными GPS, и это было очень успешно. SharpMap предоставил мне комплект преобразования для обработки данных GIS, наряду с математической основой для работы с изменяющейся информацией о GIS. Это должно быть относительно просто для использования кода нерендеринга с WPF frontend, поскольку им уже разделили представление от данных.
(РЕДАКТИРОВАНИЕ: добавленный больше деталей о том, как я использовал SharpMap)
Ваше требование создать WPF, отображающийся инструмент подобен моему, которое приводит меня спрашивать этот вопрос о DeepZoom (иначе MultiScaleImage) от Silverlight. Я хочу версию WPF. Принятый ответ предоставляет ссылку на очень хорошую начальную точку (подобный Вашему описанному мыслительному процессу).
Это - вероятно, окольный способ идти об этом, но Вы могли бы найти некоторый полезный материал в JavaScript и XAML из SilverlightEarth.com который Silverlight клиент мозаики карты на основе 1.0. Это может загрузить VE, Google, Yahoo (существует версия DeepZoom, которая может загрузить OpenStreetMap, Луну и Марс также; но так как это использует MSI, это действительно не помогает на WPF 3/3.5 передней стороне).
Хотя JavaScript немного неопрятен, можно ясно видеть, что он создает Silverlight 1.0 Xaml (динамично измеренный) Холст, заполняя его мозаиками (Средства управления изображением) и обрабатывает увеличение / и запросы панорамирования. Необходимо было бы понять весь JavaScript и преобразовать его в C# - XAML должен главным образом войти WPF неизменный. Я протестировал этот Silverlight 1.0 с Глубокой пирамидой мозаики Масштабирования (и здесь), таким образом, понятия применимы (т.е. не только для карт).
Я знаю, что это работает, потому что я сделал это сам для создания средства просмотра карты в Geoquery2008.com (снимок экрана), который является WPF/c#. К сожалению, блоки Geoquery2008 запутываются, но Вы могли бы все еще подобрать некоторые идеи или полезный код через DASM/Reflector. Это - все еще бета, таким образом, я не утверждал бы, что это - сделанных 100%. Я действительно не думал о факторизации кода карты в отдельное управление, но могу я изучать это, если другой не появляется...
Случайно я также начался с ScrollViewer, но планирую угробить его и подражать JavaScript более тесно, таким образом, легче снова использовать Объекты изображения при панорамировании/изменении масштаба (путем получения большего количества контроля над процессом, чем ScrollViewer обеспечивает).
Эти страницы MSDN в Виртуальной Наземной системе мозаики и Глубоком формате файла Масштабирования и ссылках по теме являются, вероятно, также полезной ссылкой.
Наконец - я предполагаю, что Вы видели начиная с этого сообщения, что DeepZoom/MultiScaleImage, вероятно, будет в.NET 4.0/Studio 2010.
Не знайте, используете ли Вы программное обеспечение ESRI, но я слышу, что там разработка API Silverlight для там складывает так, Вы могли бы хотеть удержать.
Основной вопрос состоит в том, как Вы храните и получаете доступ к объектам, Вы собираетесь вставить карту (предполагающий, что это не просто дисплей изображения). Поиск scenegraph для некоторых идей.
Также, если Вы хотите, чтобы это было больше, чем игрушечная программа просмотра изображений, lat долго к масштабированию XY может стать 'интересным'
Загрузите Карты Bing Управление WPF sdk (Microsoft.Maps.MapControl.WPF.dll).Add как dll как ссылка, затем измените XAML как ниже
**
<Window x:Class="WPFTestApplication.InsertPushpin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF"
Width="1024" Height="768">
<Grid x:Name="LayoutRoot" Background="White">
<m:Map CredentialsProvider="INSERT_YOUR_BING_MAPS_KEY"
Center="47.620574,-122.34942" ZoomLevel="12">
<m:Pushpin Location="47.620574,-122.34942"/>
</m:Map>
</Grid>
</Window>
**
Это вообще не падает на мою сферу работы, но вы можете взглянуть на MapWindow GIS , который имеет объект ActiveX с открытым исходным кодом, который предоставляет множество функций сопоставления и ГИС. Вот пост, объясняющий, как встроить его на приложения WPF: