我应该如何本地化静态ComboBox项?

时间:2016-10-27 15:01:30

标签: c# wpf combobox

我有一个非常简单的ComboBox,里面有一些x:Static个项目:

<ComboBox SelectedItem="{Binding Source={x:Static u:Settings.All}, Path=CaptionFontStyle}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock FontStyle="{Binding .}" FontSize="14" Text="{Binding .}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>

    <x:Static Member="FontStyles.Normal"/>
    <x:Static Member="FontStyles.Italic"/>
    <x:Static Member="FontStyles.Oblique"/>
</ComboBox>

这给了我这个:

Normal Oblique

它很好地与我的Settings绑定,FontStyle可以应用于项目,我可以直接使用SelectedItem而不会出现并发症。

我的问题是:如何使用DynamicResource本地化(翻译)每个项目,而不会失去此方案的简单性?

我尝试从StaticExtension派生,只需添加另一个字符串属性来保存本地化文本,并通过绑定链接回控件:

<TextBlock FontStyle="{Binding .}" FontSize="14" Text="{Binding Text}"/>

但是这并没有像预期的那样奏效。 :/

发布回复

正如@Funk所写,我可以简单地使用SelectedValueSelectedValuePath直接绑定到类的属性。所以我现在正在使用这个方案:

<ComboBox SelectedValuePath="FontStyle" 
          SelectedValue="{Binding Source={x:Static u:Settings.All}, Path=MyFontStyle}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock FontStyle="{Binding FontStyle}" 
                       FontSize="14" Text="{Binding Text}"/>
        </DataTemplate>
    </ComboBox.Resources>

    <TextBlock FontStyle="Normal" Text="Normal"/>
    <TextBlock FontStyle="Italic" Text="Itálico"/>
    <TextBlock FontStyle="Oblique" Text="Oblíquo"/>
</ComboBox>

1 个答案:

答案 0 :(得分:1)

您可以使用RichText类

public class RichText
{
    #region Text Property
    private String _text = "";
    public String Text
    {
        get { return _text; }
        set { _text = value; }
    }
    #endregion Name Property

    #region FontStyle Property
    private FontStyle _fontStyle = FontStyles.Normal;
    public FontStyle FontStyle
    {
        get { return _fontStyle; }
        set { _fontStyle = value; }
    }
    #endregion FontStyle Property
}

使用SelectedValue更新设置

<ComboBox 
    SelectedValuePath="FontStyle"
    SelectedValue="{Binding Source={x:Static u:Settings.All}, Path=CaptionFontStyle}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock FontStyle="{Binding FontStyle}" FontSize="14" Text="{Binding Text}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
    <local:RichText Text="Foo">
        <local:RichText.FontStyle>
            <x:Static Member="FontStyles.Normal"/>
        </local:RichText.FontStyle>
    </local:RichText>
    <local:RichText Text="Bar">
        <local:RichText.FontStyle>
            <x:Static Member="FontStyles.Italic"/>
        </local:RichText.FontStyle>
    </local:RichText>
    <local:RichText Text="Far">
        <local:RichText.FontStyle>
            <x:Static Member="FontStyles.Oblique"/>
        </local:RichText.FontStyle>
    </local:RichText>
</ComboBox>

使用文本绑定时实现INotifyPropertyChanged。