目前我正在尝试将IsOpen
a 的属性绑定ToolTip
到我的后备视图模型的属性。此外,绑定模式设置为“OneWayToSource”。
这Style
是应用于 aTreeViewItem
并包含ToolTip
定义:
<Style TargetType="TreeViewItem">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip IsOpen="{Binding IsToolTipOpen, Mode=OneWayToSource}">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding CurrentValue, StringFormat={}Value: {0}}"/>
<TextBlock Text="{Binding UnitName, StringFormat={}Unit: {0}}"
Visibility="{Binding HasUnit, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</StackPanel>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
这是它绑定到的属性的代码:
public bool IsToolTipOpen
{
get
{
return mIsToolTipOpen;
}
set
{
PegasusContext.Current.LogMessage( new PegasusMessage( string.Format( "IsTooltipOpen: {0}", value ), LogLevel.Debug ) );
if( mIsToolTipOpen == value ) return;
mIsToolTipOpen = value;
if( mIsToolTipOpen )
{
BackingIO.BeginWatching();
}
else
{
BackingIO.StopWatching();
}
}
}
第一次打开 ToolTip时,它将调用IsToolTipOpen
将其值设置为 的属性false
。此外,当 ToolTip 关闭时,它会将 的值再次设置IsToolTipOpen
为false
...。随后的每一次,该值都会按预期设置。打开第一个 ToolTip 后,它会在附加了 ToolTip 的其他项目上执行奇怪的行为。例如,它将IsToolTipOpen
属性设置为true
然后false
几乎立即返回。以后每次ToolTip
打开时,它都可以正常工作。
这是您可以在我的属性设置方法的第一行看到的日志记录代码的报告IsToolTipOpen
(还有一些我手写的附加注释):
TreeViewItem A:
IsTooltipOpen: False <-- ToolTip Opened
IsTooltipOpen: False <-- ToolTip Closed
IsTooltipOpen: True <-- ToolTip Opened
IsTooltipOpen: False <-- ToolTip Closed
TreeViewItem B:
IsTooltipOpen: True <-- ToolTip Open
IsTooltipOpen: False <-- ToolTip Open, occured at the same time as the previous entry.
IsTooltipOpen: False <-- ToolTip Closed
IsTooltipOpen: True <-- ToolTip Opened
IsTooltipOpen: False <-- ToolTip Closed
所以我很好奇是否有人知道发生了什么?和可能的解决方案?