2012-09-05 98 views
0

我有一個對象列表作爲datagrid的項目源。我也有按鈕與工具提示,但我希望工具提示是「本地化」/動態。我不想明確添加另一個屬性的類的對象(是醜陋的),所以相反,我要創建在用戶控件一個字符串,這樣做Datagrid按鈕工具提示綁定

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. 什麼是正確的語法來綁定到字符串?

回答

0

我不能完全使綁定路徑和的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)。

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元素嵌入數據的一種方式,它實際上並沒有顯示任何內容。)

+0

工具提示樣式也是自定義的,這就是爲什麼我必須使用'

+0

@Bahamut我更新了語法以使用內聯工具提示。你想設置工具提示的實際顯示文本,而不是'Tag'屬性,對嗎? – McGarnagle

+1

我忘了在樣式中使用標籤作爲模板的文本塊的文本,所以它是我需要綁定的Tag屬性。我編輯了我的帖子。我也會嘗試一下。 – Bahamut