| 

.NET C# Java Javascript Exception

3
Hallo zusammen,

ich habe gerade folgendes Problem. Ich habe ein Template für ein ToolTip gebaut. Dieser ToolTip soll sich je nach Position des TargetElements anders verhalten. D.h befindet sich das aufrufende Control im oberen Bereich des Fensters, wurd der Tooltip links vom Control nach unten hin aufgebaut. Befindet sich das Control unten, wird der Tooltip nach oben aufgebaut.
Das funktioniert auch soweit. Hier einmal der XAML Code:

<Trigger Property="Placement" Value="Left">
<Setter Property="HorizontalOffset" Value="0" />
<Setter Property="ToolTipService.PlacementTarget" Value="{Binding Converter={StaticResource VerticalToolTipConverter}}" />
<Setter Property="VerticalOffset" Value="{Binding Converter={StaticResource VerticalToolTipConverter}}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToolTip}">
<StackPanel Width="170" Orientation="Horizontal">
<Border CornerRadius="9" BorderThickness="0"
Width="160" MinHeight="130" Background="#939598">
<ContentPresenter Margin="7">
<ContentPresenter.LayoutTransform>
<ScaleTransform ScaleY="{Binding Converter={StaticResource VerticalToolTipConverter},ConverterParameter=2}" /> <!-- Hier ist mein Problem -->
</ContentPresenter.LayoutTransform>
</ContentPresenter>
</Border>
<Polygon Points="0,0 1,0.5 0,1 0,0" Fill="#939598"
VerticalAlignment="Top"
Margin="0,42,-1,42" Height="12" Width="10" Stretch="Fill" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ToolTip.LayoutTransform">
<Setter.Value>
<ScaleTransform ScaleX="0.75" ScaleY="{Binding Converter={StaticResource VerticalToolTipConverter},ConverterParameter=1}" />
</Setter.Value>
</Setter>
</Trigger>


Der VerticalToolTipConverter ermittelt die Position des aufrufenden Controls relativ zum Window. Ist das aufrufende Control oben wird eine 1 zurückgegeben (für das ScaleTransform, wo mein Problem ist). Ist das Control unten wird eine -1 zurück gegeben.

Jetzt zu der Problematik. Die Positionierung und die Darstellung sind richtig. Aller dings wird der ToolTip, wenn ich meine Maus von einem Item auf das nächste schiebe, wird der ToolTip für einen Bruchteil einer Sekunde angezeigt, verschwindet dann, und wird dann richtig angezeigt.

Wenn ich statt den Converter direkt eine Zahl mitgebe funktionierts ohne dieses Flackern
<ScaleTransform ScaleY="-1" />


Nach genauerer Analyse zeigte sich, dass der Converter genau 3mal mit dem Parameter "2" aufgerufen wird, welches nur von diesem ScaleTransform gemacht wird.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(targetType == typeof(double))
{
if (parameter != null)
{
return GetScaleTransform(value,parameter);
}
else
{
return GetOffset(value);
}
}
return null;
}


Hier kommt im Converter 2mal value == null an, dannach ist value das aufrufende Control. Ich vermute, dass genau hier das Problem liegt.
Die Reihenfolge ist immer die gleiche:
1. null
2. null
3. Control

Kann mir einer sagen, warum der Converter immer 3mal aufgerufen wird.

Ich hoffe ihr versteht meine Problematik. Wenn noch fragen sind, einfach kommentieren ;)

Danke und Gruß
Andy
News:
15.04.2011
cruX 803 1 1 9
cruX 803 1 1 9
Auf die Beantwortung dieser Frage war ein Kopfgeld in Höhe von 50 Reputationspunkten ausgesetzt. Das Kopfgeld wurde bereits vergeben.
3 Antworten
1
Vielleicht helfen dir diese Tipps rauszubekommen warum das passiert?
21.04.2011
Konstantin 3,7k 1 8
0
Ohne jetzt der WPF-Profi zu sein: Den Converter "rufst" du ja von verschiedenen Stellen im Trigger auf. Sprich: der ist an vier Stellen gebunden. Nimm probehalber halt die Bindings aus zwei Stellen heraus. Dann müsste es nicht mehrfach aufgerufen werden.
15.04.2011
tboerner 509 8
Nein, es wird definitiv von der Stelle aufgerufen. Das ist die einzige Stelle an der ich als Parameter eine 2 mitgebe. Bei jedem Aufruf des Converters ist der Parameter == 2. Deshalb kann es nur von der Stelle aus kommen. Trotzdem Danke :)
cruX 15.04.2011
0
Hast du schonmal gedebuggt ?

Wie sehen die Stacktraces aus ?
Variieren sie ?
Wird das Control mehrfach instanziiert ?
Treten noch andere Events doppelt auf ?
21.04.2011
Gentlehag 1,0k 3 8

Stelle deine .net-Frage jetzt!