0

我有一个对象列表作为数据网格的项目源。我也有带有工具提示的按钮,但我希​​望工具提示是“可本地化的”/动态的。我不想在对象的类上显式添加另一个属性(会很难看)所以相反,我想在 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. 绑定到字符串的正确语法是什么?
4

2 回答 2

0

如果对象是可本地化的资源,最好使用实际的 .ResX 文件。有关如何在 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 支持使用AncestorTypein 相对绑定,但 Silverlight 4 不支持。
2. 另请注意,您要使用ToolTipService.ToolTip(Tag是一种在任何 XAML 元素中嵌入数据的方式,它实际上不显示任何内容。)

于 2012-09-05T16:43:10.770 回答
0

我不能让 Binding Path 和 ElementName 样式正常工作,所以我决定制作一个像这样的自定义类

public class LocalizedDatagridButtonsTooltips
{
   public string TooltipOne { get { return SomeMethodToTranslate("This Phrase"); } }
   ...
}

在 App.xaml 中创建类的实例(取决于声明类的位置)。“本地”在 xaml 上声明。

<local:LocalizedDatagridButtonsTooltips x:Key="LocalizedTooltips"/>

然后在 xaml 中设置标签或需要字符串的任何元素(在我的情况下,标签属性需要绑定)

<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)。

于 2012-09-07T09:06:21.213 回答