C# 在WP8上的XAML中设置用户控件中自定义样式按钮的内容
在WP8/XAML/C中,我为一种新型按钮创建了一个用户控件。我添加了一个名为Text的依赖属性,我想在其中设置按钮的文本。当我第一次设置按钮时,它就起作用了。例如,为了C# 在WP8上的XAML中设置用户控件中自定义样式按钮的内容,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,在WP8/XAML/C中,我为一种新型按钮创建了一个用户控件。我添加了一个名为Text的依赖属性,我想在其中设置按钮的文本。当我第一次设置按钮时,它就起作用了。例如,为了 <ui:JapanButton x:Name="JapanButton1" Text="Japan"></ui:JapanButton> 但是,这不会更新按钮上的文本。因此,似乎我在用户控件的绑定中做错了什么。这是我为该控件编写的XAML和C#代码 C#用户控件的代码隐藏 使用System.Win
<ui:JapanButton x:Name="JapanButton1" Text="Japan"></ui:JapanButton>
但是,这不会更新按钮上的文本。因此,似乎我在用户控件的绑定中做错了什么。这是我为该控件编写的XAML和C#代码
C#用户控件的代码隐藏
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
名称空间用户界面
{
公共部分类JapanButton:UserControl
{
公共静态只读DependencyProperty TextProperty=
DependencyProperty.Register(“文本”、typeof(字符串)、typeof(JapanButton)、null);
公共字符串文本
{
获取{return(string)GetValue(TextProperty);}
set{SetValue(TextProperty,value);}
}
公共双字号
{
获取{return(double)GetValue(FontSizeProperty);}
set{SetValue(FontSizeProperty,value);}
}
公共日本按钮()
{
初始化组件();
已加载+=已加载;
}
已加载专用void(对象发送方,RoutedEventArgs RoutedEventArgs)
{
var bindingTitle=新绑定();
bindingTitle.Source=文本;
ButtonJapan.SetBinding(ContentControl.ContentProperty,bindingTitle);
var bindingFontSize=新绑定();
bindingFontSize.Source=FontSize;
ButtonJapan.SetBinding(FontSizeProperty,bindingFontSize);
}
}
}
非常感谢您的帮助。您没有使用NotifyPropertyChanged API来告诉UI文本或字体大小属性已更改。我的建议是实际删除绑定,并使用更改处理程序手动更新控件属性,根据:
我以前试过,但运气不好。首先,ButtonJapan是用户控件中的一个变量(请参见XAML中的x:Name),因此无法从静态方法中访问它。其次,不幸的是,type按钮不包含名为Text的属性。设置标题总是以设置内容结束,但我不能从字符串转换到内容。但也许我不太理解您提出的解决方案。为了最终工作,我必须替换
…=文本代码>在最后一行中,带有…=d、 GetValue(TextProperty)
并在OnTextChanged
的签名中将dependencProperty
替换为DependencyObject
。谢谢你的帮助:)
JapanButton1.Text = "Not Japan";
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(JapanButton), new PropertyMetadata(OnTextChanged));
private static void OnTextChanged(DependencyProperty d, DependencyPropertyChangedEventArgs e)
{
(d as JapanButton).ButtonJapan.Content = Text;
}