Silverlight Datagrid按钮工具提示绑定
我有一个对象列表作为datagrid的项源。我也有带有工具提示的按钮,但我希望工具提示是“可本地化的”/“动态的”。我不想显式地在对象类上添加另一个属性(这会很难看),因此,我想在UserControl中创建一个字符串,并执行以下操作Silverlight Datagrid按钮工具提示绑定,silverlight,xaml,binding,silverlight-4.0,Silverlight,Xaml,Binding,Silverlight 4.0,我有一个对象列表作为datagrid的项源。我也有带有工具提示的按钮,但我希望工具提示是“可本地化的”/“动态的”。我不想显式地在对象类上添加另一个属性(这会很难看),因此,我想在UserControl中创建一个字符串,并执行以下操作 public string ThisTag { get { return "someString"; } } 在xaml上 <Button ...> <ToolTipService.ToolTip> <Toolti
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>
...
...
如果对象是可本地化的资源,则最好使用实际的.ResX文件。请参阅此处,了解关于的详细介绍(基本上,您将.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元素的方法,它实际上不显示任何内容。)
我不能让绑定路径和ElementName样式正常工作,所以我决定创建一个这样的自定义类
public class LocalizedDatagridButtonsTooltips
{
public string TooltipOne { get { return SomeMethodToTranslate("This Phrase"); } }
...
}
在App.xaml中创建类的实例(取决于类的声明位置)。“local”在xaml上声明
<local:LocalizedDatagridButtonsTooltips x:Key="LocalizedTooltips"/>
然后在xaml中设置标记或任何需要字符串的元素(在我的例子中,标记属性需要绑定)
我从这里得到了解决方案:
这些解决方案也适用于4-5(我认为SL 5具有“AncestorType”accr.dbaseman)。工具提示样式也是定制的,这就是为什么我必须使用
…
,所以我不能直接使用该绑定。其他工具提示也在使用该样式,因此我无法在静态资源中设置标记。@Bahamut我更新了语法以使用内联工具提示。您想设置工具提示的实际显示文本,而不是标记
属性,对吗?我忘了在样式中使用标记作为模板的textblock文本,因此我需要绑定标记属性。我已经编辑了我的帖子。我也会尝试一下。我做了{Binding Path=DataContext.ThisTag,ElementName=LayoutRoot},但它只是空的。LayoutRoot是我在xaml中的根元素。DataContext.ThisTag是否链接用户控件的字符串ThisTag成员?像“public class MyUC:UserControl{public string ThisTag…”@Bahamut它链接到用户控件的DataContext
成员的ThisTag
。那么它的DataContext是后面的代码,还是你的模型对象?
<Tooltip Tag="{Binding Source={StaticResource LocalizedTooltips}, Path=TooltipOne}" >