Datagrid按钮工具提示绑定

时间:2012-09-05 16:23:42

标签: silverlight xaml binding silverlight-4.0

我有一个对象列表作为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>
...
  1. 这是可能的还是有类似的简单方法绑定到属性?
  2. 绑定到字符串的正确语法是什么?

2 个答案:

答案 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.ToolTipTag是一种在任何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)。