我有一个对象列表作为datagrid的项目源。我也有工具提示的按钮,但我希望工具提示“本地化”/动态。我不想在对象的类上显式添加另一个属性(会很难看)所以相反,我想在UserControl中创建一个字符串并执行类似
的操作public string ThisTag { get { return "someString"; } }
和xaml
<Button ...>
<ToolTipService.ToolTip>
<Tooltip Style={StaticResource ToolTipStyle} Tag={Binding Source=thisUserControl.ThisTag} />
...
风格
<Style x:Name="ToolTipStyle" TargetType="ToolTip">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Grid>
<TextBlock Text="{TemplateBinding Tag}" Foreground="{StaticResource AnotherResource}"></TextBlock>
...
答案 0 :(得分:0)
如果对象是可本地化的资源,则最好使用实际的.ResX文件。有关how to use these within XAML的详细介绍,请参阅此处(基本上,您将.ResX引用为静态XAML资源)。
但是如果你真的只想绑定到代码隐藏属性,那么这也应该是可能的。这是正确设置Source
属性的问题。您可以通过引用根元素的DataContext
来执行此操作,即:
<Button Content="button text">
<ToolTipService.ToolTip>
<TextBlock Text="{Binding Path=DataContext.ThisTag,ElementName=LayoutRoot}" />
</ToolTipService.ToolTip>
</Button>
其中LayoutRoot
是控件/窗口/页面中根元素的名称。
<子>
1.请注意,Silverlight 5支持在相对绑定中使用AncestorType
,但Silverlight 4不支持。
2.另请注意,您要使用ToolTipService.ToolTip
(Tag
是一种在任何XAML元素中嵌入数据的方法,它实际上并不显示任何内容。)
子>
答案 1 :(得分:0)
我无法完全使绑定路径和ElementName样式工作,所以我决定制作一个类似的自定义类
public class LocalizedDatagridButtonsTooltips
{
public string TooltipOne { get { return SomeMethodToTranslate("This Phrase"); } }
...
}
在App.xaml中创建类的实例(取决于声明类的位置)。 “local”在xaml上声明。
<local:LocalizedDatagridButtonsTooltips x:Key="LocalizedTooltips"/>
然后设置标签或xaml中需要字符串的任何元素(在我的例子中,Tag属性需要绑定)
<Tooltip Tag="{Binding Source={StaticResource LocalizedTooltips}, Path=TooltipOne}" >
我从这里得到了解决方案:
http://www.c-sharpcorner.com/uploadfile/dpatra/using-static-resource-in-silverlight-3-application/
这些解决方案也适用于4-5(我认为SL 5具有“AncestorType”accr.dbaseman)。