我看了几十个问题,但还没有找到这个看似简单的需求的答案。
我正在使用Silverlight 4。我想在具有Style定义的ResourceDictionary文件中定义一个ToolTip WITH CONTROLS IN IT。
我的用户控制文件UC_Activity。xaml":
...
<TextBox Style="{StaticResource Style0}" Name="tb_id" />
...
如果我的"样式"。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Style x:Key="Style0" TargetType="TextBox">
<Setter Property="FontSize" Value="12" />
<Setter Property="FontFamily" Value="Portable User Interface" />
<Setter Property="ToolTipService.ToolTip" Value="Long tooltip text here. This WORKS, but part of the text ends up out of the screen." />
</Style>
</ResourceDictionary>
可以工作,但我只能显示简单的文本作为工具提示,如果文本很长,它将结束在屏幕之外,在那里它是不可能被看到的。我想要的是这样的:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Style x:Key="Style0" TargetType="TextBox">
<Setter Property="FontSize" Value="12" />
<Setter Property="FontFamily" Value="Portable User Interface" />
<Setter Property="ToolTipService.ToolTip">
<Setter.Value>
<StackPanel>
<sdk:Label Content="Short text here."/>
<TextBlock TextWrapping="Wrap" MaxWidth="200" Text="Long text here. This does NOT WORK." />
</StackPanel>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
,但它不工作。它可以正常构建,但是在开始执行时给出一个异常("值不在预期范围内。")。
请问,我该怎么做?非常感谢。
我有一个类似的问题,问题是,它需要是一个DataTemplate,所以不同的实例被添加到可视化树的每次使用。我为此创建了一个附加属性:
则可以这样使用:
<Setter Property="ControlsBehaviours:TooltipTemplate.Template">
<Setter.Value>
<DataTemplate>
<ToolTip Content="tooltip" />
</DataTemplate>
</Setter.Value>
</Setter>
public class TooltipTemplate
{
/// <summary>
/// Template Dependency Property.
/// </summary>
public static readonly DependencyProperty TemplateProperty =
DependencyProperty.RegisterAttached(
"Template",
typeof (DataTemplate),
typeof (TooltipTemplate),
new PropertyMetadata(new PropertyChangedCallback(TemplateChanged)));
public static void SetTemplate(DependencyObject o, DataTemplate value)
{
o.SetValue(TemplateProperty, value);
}
public static DataTemplate GetTemplate(DependencyObject o)
{
return (DataTemplate) o.GetValue(TemplateProperty);
}
private static void TemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ToolTipService.SetToolTip(d, ((DataTemplate)e.NewValue).LoadContent());
}
}