Немодальное плавающее диалоговое окно в WPF

вы также можете использовать:

//writes messages only to email clients
public void setWriteEmailButton() {
    btnWriteMail.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent i = new Intent(Intent.ACTION_SENDTO);
            i.setData(Uri.parse("mailto:"));
            i.putExtra(Intent.EXTRA_EMAIL  , new String[]{mConsultantInfos.getConsultantEMail()});
            i.putExtra(Intent.EXTRA_SUBJECT, mContext.getString(R.string.txtSubjectConsultantMail));
            i.putExtra(Intent.EXTRA_TEXT   , "");
            try {
                startActivity(Intent.createChooser(i, mContext.getString(R.string.txtWriteMailDialogTitle)));
            } catch (android.content.ActivityNotFoundException ex) {
                UI.showShortToastMessage(mContext, R.string.msgNoMailClientsInstalled);
            }
        }
    });
}

повеселиться (комбинация обоих;))

7
задан Dave Clemmer 31 July 2011 в 00:18
поделиться

1 ответ

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

Вот пример, полностью использующий XAML:

<Grid>
    <ToggleButton HorizontalAlignment="Center" VerticalAlignment="Top" 
                  x:Name="PopButton" Content="Pop"/>
    <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=PopButton}" StaysOpen="False" 
           IsOpen="{Binding ElementName=PopButton, Path=IsChecked, Mode=TwoWay}">
        <Rectangle Height="100" Width="200" Fill="Blue"/>
    </Popup>
</Grid>

Вы также можете использовать команды или обработчики событий для открытия / закрытия всплывающего окна из кода.

Свойства Placement и PlacementTarget задают место, где будет отображаться всплывающее окно, и относительно какого элемента управления он будет отображаться (есть другие параметры, которые позволяют отображать его относительно его текущего положения, а также относительно мыши). Если для параметра StaysOpen установлено значение False, WPF автоматически закроет всплывающее окно, когда пользователь щелкнет за его пределами.

По умолчанию всплывающее окно не имеет собственного стиля - это просто контейнер для плавающего содержимого, поэтому вам придется стилизовать его. чтобы выглядеть как ваше окно chrome / toolbar / etc. в зависимости от обстоятельств.

13
ответ дан 6 December 2019 в 19:41
поделиться
Другие вопросы по тегам:

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