如何更改WP8应用程序中的字体颜色

时间:2014-02-19 18:15:37

标签: c# windows-phone-8 fonts colors

我正在为视障人士开发一个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();
    }
}

这是我遇到困难的地方,我应该将此调用发送到资源文件,以便更改整个应用程序。

1 个答案:

答案 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;

如果您有任何疑问,请随时询问。