Как реализовать сообщение Воздушного шара в приложении WPF

Мы хотели бы использовать сообщения воздушного шара, как описано в Руководстве UX от Microsoft. Я нашел некоторые образцы, который использует собственный код от Windows Forms, но собственный код требует дескриптора к компоненту, который немного трудный для приложения WPF, так как это не следует за тем же понятием.

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

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

Существует ли коммерческое или управление с открытым исходным кодом, созданное для этого варианта использования под WPF, о котором я должен знать?

22
задан tronda 22 February 2010 в 10:54
поделиться

3 ответа

Я закончил тем, что поместил TextBlock в слой украшения:

<Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
        <ControlTemplate>
            <StackPanel Orientation="Vertical">
                <Border>
                    <AdornedElementPlaceholder  x:Name="adorner"/>
                </Border>
                <TextBlock 
                    Height="20" Margin="10 0" Style="{StaticResource NormalColorBoldWeightSmallSizeTextStyle}"
                    Text="{Binding ElementName=adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
            </StackPanel>
        </ControlTemplate>
    </Setter.Value>
</Setter>

Я также использовал всплывающую подсказку, как показано во всех примерах WPF:

<Style.Triggers>
    <Trigger Property="Validation.HasError" Value="True">
        <Setter Property="ToolTip"
                Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}">
        </Setter>
    </Trigger>
</Style.Triggers>

Не оптимально (мне бы очень понравился элемент управления Balloon Message), но работает достаточно хорошо для нужд, которые у нас есть.

5
ответ дан 29 November 2019 в 05:24
поделиться

Руководство по UX указывает, что различия между воздушным шаром и подсказкой следующие:

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

  • Воздушные шары имеют заголовок, основной текст и значок.

  • Воздушные шары могут быть интерактивными, в то время как нажать на подсказку невозможно.

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

Но если все, что вы делаете, это отображение уведомлений, вы можете использовать ToolTip. Вам также не нужно возиться с декораторами; просто создайте шаблон элемента управления для ToolTip, который выглядит так, как вы хотите, создайте ресурс ToolTip, который использует этот стиль, и установите свойство ToolTip целевого элемента управления на этот ToolTip. Используйте ToolTipService для управления отображением относительно цели размещения.

9
ответ дан 29 November 2019 в 05:24
поделиться

В нашем приложении мы реализовали выноски в виде простого окна WPF. Расположение окна ограничено некоторыми свойствами модели родительского элемента управления. Вот пример кода (где BalloonContainerWindow наследуется от Window):

        BaloonContainterWindow newBalloon = new BaloonContainterWindow();
        newBalloon.CreateBaloon(balloonType, balloonData);

        // Allow input and output when theis window is on top of winforms window
        SetBalloonLocation(newBalloon, sequenceId, stepId, rulerModel);

        newBalloon.Show();
        newBalloon.CloseOnDeactivation = false;
        newBalloon.Activate();
2
ответ дан 29 November 2019 в 05:24
поделиться
Другие вопросы по тегам:

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