我的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上以正确的方式使用本地化字符串?或者有人可以给我一个暗示吗?
答案 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;
}