我正在为视障人士开发一个WP8应用程序,我正在努力改变应用程序中字体的颜色。我没有这个API可以帮助我。我想要做的是在longlistselector中将有一个颜色列表,用户可以选择一种颜色,整个应用程序字体颜色会发生变化。我不是世界上最好的程序员,因为我刚刚开始,这个应用程序正朝着我的一个家庭成员。我坚持的部分是试图改变它,我可以选择它,但之后无处可去,任何指针或提示都会很棒。
public MainPage()
{
InitializeComponent();
font.Add(new Theme1() { ThemeText = "White", ThemeFontSize = "40" });
font.Add(new Theme1() { ThemeText = "Green", ThemeFontSize = "40" });
font.Add(new Theme1() { ThemeText = "Blue", ThemeFontSize = "40" });
LLsFontList.ItemsSource = font;
}
private void LLsFontList_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
if (LLsFontList != null && LLsFontList.SelectedItem != null)
{
var selectedItem = LLsFontList.SelectedItem as Theme1;
SayWords(selectedItem.ThemeText + "\r\n");
var id = selectedItem.ThemeText.FirstOrDefault();
}
}
这是我遇到困难的地方,我应该将此调用发送到资源文件,以便更改整个应用程序。
答案 0 :(得分:1)
我的解决方案不是最优雅的,但我希望这会让你前进。
好的,这是你的Theme类应该是这样的:
public class Theme : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string themeText;
public string ThemeText
{
get
{
return themeText;
}
set
{
themeText = value;
OnPropertyChanged("ThemeText");
}
}
private int fontSize;
public int FontSize
{
get
{
return fontSize;
}
set
{
fontSize = value;
OnPropertyChanged("FontSize");
}
}
private Brush fontColor;
public Brush FontColor
{
get
{
return fontColor;
}
set
{
fontColor = value;
OnPropertyChanged("FontColor");
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(name));
}
}
然后在Textblocks和Theme类的对象之间创建绑定:
<TextBlock x:Name="TextBlock" Text="{Binding ThemeText}" FontSize="{Binding FontSize}" Foreground="{Binding FontColor}"/>
关于代码隐藏:你应该有一个带有一些默认值的全局Theme对象:
Theme theme = new Theme
{
ThemeText = "Red",
FontColor = new SolidColorBrush(Colors.Red),
FontSize = 40
};
然后将TextBlock的DataContext设置为它(内部页面构造函数):
TextBlock.DataContext = theme;
如果你想改变它,就这样做:
theme.ThemeText = "Blue";
theme.FontColor = new SolidColorBrush(Colors.Blue);
theme.FontSize = 60;
如果您有任何疑问,请随时询问。