Мы хотели бы использовать сообщения воздушного шара, как описано в Руководстве UX от Microsoft. Я нашел некоторые образцы, который использует собственный код от Windows Forms, но собственный код требует дескриптора к компоненту, который немного трудный для приложения WPF, так как это не следует за тем же понятием.
Я нашел некоторый пример кода, который использует механизм декоратора WPF, но я все еще не убежден, что это - самый легкий подход для приложения WPF. Возможная реализация могла быть должна реализовать декоратора вокруг подсказки?
Конкретный случай, который я имею, является формой с несколькими текстовыми полями, которым нужны контроль ввода и уведомление на возможных неправильных входных значениях - что-то, что кажется подходящим для сообщений воздушного шара.
Существует ли коммерческое или управление с открытым исходным кодом, созданное для этого варианта использования под WPF, о котором я должен знать?
Я закончил тем, что поместил 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), но работает достаточно хорошо для нужд, которые у нас есть.
Руководство по UX указывает, что различия между воздушным шаром и подсказкой следующие:
Воздушные шары могут отображаться независимо от текущего местоположения указателя, поэтому у них есть хвост, который указывает на их источник.
Воздушные шары имеют заголовок, основной текст и значок.
Воздушные шары могут быть интерактивными, в то время как нажать на подсказку невозможно.
Последнее является единственным камнем преткновения в WPF. Если вам нужно, чтобы пользователь мог взаимодействовать с содержимым шарика, то это должно быть всплывающее окно, а не ToolTip. (Вам может помочь это сообщение на форуме, если вы пойдете этим путем.)
Но если все, что вы делаете, это отображение уведомлений, вы можете использовать ToolTip. Вам также не нужно возиться с декораторами; просто создайте шаблон элемента управления для ToolTip, который выглядит так, как вы хотите, создайте ресурс ToolTip, который использует этот стиль, и установите свойство ToolTip
целевого элемента управления на этот ToolTip
. Используйте ToolTipService
для управления отображением относительно цели размещения.
В нашем приложении мы реализовали выноски в виде простого окна 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();