我已经在触摸屏中为ToolTip创建了新的公共类。我有很多ToolTip的控件和页面。所以我只想在XAML中使用这个普通类。
@ Common Class
public class CommonLayout : Window
{
Timer Timer { get; set; }
ToolTip toolTip { get; set; }
public CommonLayout(TextBlock control)
{
Timer = new Timer();
Timer.Interval = 3000;
Timer.Elapsed += OnTimerElapsed;
control.MouseLeave += OnMouseLeave;
control.MouseLeftButtonUp += OnMouseLeftButtonUp;
}
public void OnMouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
CloseToolTip();
}
public void OnMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
toolTip = ((ToolTip)((TextBlock)sender).ToolTip);
toolTip.IsOpen = true;
Timer.Start();
}
private void CloseToolTip()
{
if (toolTip != null)
{
toolTip.IsOpen = false;
}
}
private void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
Timer.Stop();
Application.Current.Dispatcher.BeginInvoke((Action)CloseToolTip, DispatcherPriority.Send);
}
}
@XAML 我想绑定常见的ToolTip类关于3种以下的TextBlock。 它也必须在其他页面中使用。
<StackPanel Margin="30">
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" TextWrapping="Wrap" Text="ToolTip Test"
ToolTipService.ShowOnDisabled="True" >
<TextBlock.ToolTip>
<ToolTip Placement="Mouse" Content="This is ToolTip Test." />
</TextBlock.ToolTip>
</TextBlock>
<TextBlock x:Name="textBlock1" HorizontalAlignment="Left" TextWrapping="Wrap" Text="ToolTip Test1"
ToolTipService.ShowOnDisabled="True" >
<TextBlock.ToolTip>
<ToolTip Placement="Mouse" Content="This is ToolTip Test." />
</TextBlock.ToolTip>
</TextBlock>
<TextBlock x:Name="textBlock2" HorizontalAlignment="Left" TextWrapping="Wrap" Text="ToolTip Test2"
ToolTipService.ShowOnDisabled="True" >
<TextBlock.ToolTip>
<ToolTip Placement="Mouse" Content="This is ToolTip Test." />
</TextBlock.ToolTip>
</TextBlock>
</StackPanel>
答案 0 :(得分:0)
您的CommonLayout继承自Window。因此它只能用作Windows,而不能用作Window的一部分。
为了您的目的,它更适合使用行为机制,尤其适用于您的情况。请按照下一个教程进行操作:https://wpftutorial.net/Behaviors.html
结果看起来像是:
public class CommonLayout : Behavior<UIElement> {
// your code with corrections from tutorial
}
Xaml是这样的:
<TextBlock>
<e:Interaction.Behaviors>
<b:CommonLayout/>
</e:Interaction.Behaviors>
</TextBlock>
不要忘记之前添加对程序集的引用:System.Windows.Interactivity
我希望它会对你有所帮助。