Silverlight Datagrid按钮工具提示绑定

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

我有一个对象列表作为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>
...

...
  • 这是可能的,还是有类似的简单方法绑定到属性
  • 绑定到字符串的正确语法是什么

  • 如果对象是可本地化的资源,则最好使用实际的.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}" >