UserControl上的本地化属性

时间:2014-03-03 14:45:15

标签: c# xaml windows-phone-8 binding localization

我的XAML和C#上的Windows Phone 8应用程序中的本地化和UserControl存在问题。不幸的是,尽管整个周末都试图修复它,但我没有找到有用的解决方案。

问题:

我有一个自定义UserControl,我在MainPage.xaml中使用它。我尝试将本地化字符串绑定到IngredientName,但我得到:

  

System.Windows.Markup.XamlParseException(无法分配给属性)

这是 MyUserControl.xaml

<UserControl x:Name="myuc">
        <TextBlock x:Name="txt_IngredientName />
</UserControl>

在代码隐藏( MyUserControl.xaml.cs )中,我使用以下行在MainPage中设置和获取值:

public string IngredientName
{
    get { return this.txt_ingredientName.Text; }
    set { this.txt_ingredientName.Text = value; }
}

MainPage.xaml 中,我按以下方式调用UserControl:

<local:MyUserControl IngredientName="Chocolate"/>

这很好用。但是当我想使用本地化字符串时:

IngredientName="{Binding Path=LocalizedResources.Chocolate, Source={StaticResource LocalizedStrings}}"

我收到了错误。

我阅读并尝试了很多关于依赖关系,绑定等等,但我没有得到它的工作。有没有人知道在UserControl上以正确的方式使用本地化字符串?或者有人可以给我一个暗示吗?

1 个答案:

答案 0 :(得分:4)

Binding工作,您需要DependencyProperty。将以下代码放在MyUserControl

public static readonly DependencyProperty IngredientNameProperty
    = DependencyProperty.Register(
        "IngredientName",
        typeof(string),
        typeof(MyUserControl),
        new PropertyMetadata(HandleIngredientNameChanged));

public string IngredientName
{
    get { return (string)GetValue(IngredientNameProperty); }
    set { SetValue(IngredientNameProperty, value); }
}

private static void HandleIngredientNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var control = (MyUserControl) d;
    control.txt_ingredientName.Text = (string) e.NewValue;
}