Разработка WPF отображает управление

Я понимаю, что это исключение возникает, когда этап переходит в режим скрытия, а компонент уведомления не может найти этап, когда уведомление должно отображаться на этапе. После поиска в Интернете я нахожу два решения этой проблемы.

Решение 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

13
задан Dylan 29 December 2008 в 20:14
поделиться

8 ответов

При поиске хорошего начала можно использовать основу кода, предоставленного проект SharpMap, и создать из там. Если я вспоминаю, что было несколько человек, уже работающих над рендерером WPF для SharpMap, таким образом, у Вас может также быть некоторый код для начала.

я лично использовал SharpMap в приложении C# 2.0, которое объединило данные GIS с оперативными данными GPS, и это было очень успешно. SharpMap предоставил мне комплект преобразования для обработки данных GIS, наряду с математической основой для работы с изменяющейся информацией о GIS. Это должно быть относительно просто для использования кода нерендеринга с WPF frontend, поскольку им уже разделили представление от данных.

(РЕДАКТИРОВАНИЕ: добавленный больше деталей о том, как я использовал SharpMap)

9
ответ дан 1 December 2019 в 23:16
поделиться

Виртуальная Земля имеет что-то польза к WPF

1
ответ дан 1 December 2019 в 23:16
поделиться

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

1
ответ дан 1 December 2019 в 23:16
поделиться

Это - вероятно, окольный способ идти об этом, но Вы могли бы найти некоторый полезный материал в 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.

5
ответ дан 1 December 2019 в 23:16
поделиться

Не знайте, используете ли Вы программное обеспечение ESRI, но я слышу, что там разработка API Silverlight для там складывает так, Вы могли бы хотеть удержать.

1
ответ дан 1 December 2019 в 23:16
поделиться

Основной вопрос состоит в том, как Вы храните и получаете доступ к объектам, Вы собираетесь вставить карту (предполагающий, что это не просто дисплей изображения). Поиск scenegraph для некоторых идей.

Также, если Вы хотите, чтобы это было больше, чем игрушечная программа просмотра изображений, lat долго к масштабированию XY может стать 'интересным'

0
ответ дан 1 December 2019 в 23:16
поделиться

Загрузите Карты 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>

**

1
ответ дан 1 December 2019 в 23:16
поделиться

Это вообще не падает на мою сферу работы, но вы можете взглянуть на MapWindow GIS , который имеет объект ActiveX с открытым исходным кодом, который предоставляет множество функций сопоставления и ГИС. Вот пост, объясняющий, как встроить его на приложения WPF:

http://www.mapwindow.org/phorum/read.php?13,13484

1
ответ дан 1 December 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: