Browse Source

Fix the TextBox error ToolTip.

Create a new popup window for each ToolTip as sharing one was causing
problems when ToolTip was included in a control template.
pull/691/head
Steven Kirk 10 years ago
parent
commit
9094de563e
  1. 23
      src/Avalonia.Controls/ToolTip.cs
  2. 1
      src/Avalonia.Themes.Default/Accents/BaseLight.xaml
  3. 4
      src/Avalonia.Themes.Default/DefaultTheme.xaml
  4. 3
      src/Avalonia.Themes.Default/TextBox.xaml

23
src/Avalonia.Controls/ToolTip.cs

@ -105,20 +105,17 @@ namespace Avalonia.Controls
{
if (control != null && control.IsVisible && control.GetVisualRoot() != null)
{
if (s_popup == null)
if (s_popup != null)
{
s_popup = new PopupRoot
{
Content = new ToolTip(),
};
((ISetLogicalParent)s_popup).SetParent(control);
throw new AvaloniaInternalException("Previous ToolTip not disposed.");
}
var cp = MouseDevice.Instance?.GetPosition(control);
var position = control.PointToScreen(cp ?? new Point(0, 0)) + new Vector(0, 22);
((ToolTip)s_popup.Content).Content = GetTip(control);
s_popup = new PopupRoot();
((ISetLogicalParent)s_popup).SetParent(control);
s_popup.Content = new ToolTip { Content = GetTip(control) };
s_popup.Position = position;
s_popup.Show();
@ -148,9 +145,15 @@ namespace Avalonia.Controls
if (control == s_current)
{
if (s_popup != null && s_popup.IsVisible)
if (s_popup != null)
{
s_popup.Hide();
// Clear the ToolTip's Content in case it has control content: this will
// reset its visual parent allowing it to be used again.
((ToolTip)s_popup.Content).Content = null;
// Dispose of the popup.
s_popup.Dispose();
s_popup = null;
}
s_show.OnNext(null);

1
src/Avalonia.Themes.Default/Accents/BaseLight.xaml

@ -19,6 +19,7 @@
<SolidColorBrush x:Key="ThemeAccentBrush3">#66119EDA</SolidColorBrush>
<SolidColorBrush x:Key="ThemeAccentBrush4">#33119EDA</SolidColorBrush>
<SolidColorBrush x:Key="ErrorBrush">Red</SolidColorBrush>
<SolidColorBrush x:Key="ErrorBrushLight">#10ff0000</SolidColorBrush>
<sys:Double x:Key="ThemeBorderThickness">2</sys:Double>
<sys:Double x:Key="ThemeDisabledOpacity">0.5</sys:Double>

4
src/Avalonia.Themes.Default/DefaultTheme.xaml

@ -1,4 +1,7 @@
<Styles xmlns="https://github.com/avaloniaui">
<!-- Define ToolTip first so its styles can be overriden by other controls (e.g. TextBox) -->
<StyleInclude Source="resm:Avalonia.Themes.Default.ToolTip.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.FocusAdorner.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.Button.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.Carousel.xaml?assembly=Avalonia.Themes.Default"/>
@ -28,7 +31,6 @@
<StyleInclude Source="resm:Avalonia.Themes.Default.TextBox.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.ToggleButton.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.Expander.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.ToolTip.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.TreeView.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.TreeViewItem.xaml?assembly=Avalonia.Themes.Default"/>
<StyleInclude Source="resm:Avalonia.Themes.Default.Window.xaml?assembly=Avalonia.Themes.Default"/>

3
src/Avalonia.Themes.Default/TextBox.xaml

@ -78,6 +78,7 @@
<Setter Property="IsVisible" Value="True"/>
</Style>
<Style Selector="TextBox /template/ ToolTip">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="Background" Value="{StyleResource ErrorBrushLight}"/>
<Setter Property="BorderBrush" Value="{StyleResource ErrorBrush}"/>
</Style>
</Styles>
Loading…
Cancel
Save