C#资源值随Button改变

时间:2016-02-09 23:06:15

标签: c# button resources uwp

我有一个简单的UWP应用程序是一个简单的计算器。所以我通过这样的样式设置按钮的所有属性。

<Page.Resources>
    <Style TargetType="Button" x:Key="CalculatorButtons">
        <Setter Property="VerticalAlignment" Value="Stretch" />
        <Setter Property="HorizontalAlignment" Value="Stretch" />
        <Setter Property="FontSize" Value="30" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="BorderBrush" Value="Black" />
        <Setter Property="Background" Value="AntiqueWhite" />
    </Style>
</Page.Resources>

我想制作一个按钮,它将改变我所制作的Style中Background属性的Value。我的按钮代码就像这样开始

private void ColorChange_Click(object sender, RoutedEventArgs e)
{

}

我是新手,我无法找到方法来访问它并从此处更改。

2 个答案:

答案 0 :(得分:0)

您无法在运行时修改样式,唯一的方法是创建新样式并替换旧样式。

private void ColorChange_Click(object sender, RoutedEventArgs e)
{
       var style = new Style(typeof(Button));

        style.Setters.Add(new Setter(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Stretch));
        style.Setters.Add(new Setter(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Stretch));
        style.Setters.Add(new Setter(Control.FontSizeProperty, 30.0));
        style.Setters.Add(new Setter(Control.BorderThicknessProperty, new Thickness(1.0)));
        style.Setters.Add(new Setter(Control.BorderBrushProperty, Brushes.Black));

        style.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.Orange));

        this.Resources["CalculatorButtons"] = style;
}

请注意,在这种情况下您必须使用DynamicResource,例如:

<Button Style="{DynamicResource ResourceKey=CalculatorButtons}" ...

答案 1 :(得分:0)

好的,经过大量的搜索,我发现我需要的一切http://blog.jerrynixon.com/2013/01/walkthrough-dynamically-skinning-your.html这个想法非常简单。所以从我的风格中我删除了背景设置器并创建了自己的资源。但是在我自己的字典中,我将它命名为Style.Blue.xaml,因为它的蓝色我为我的所有颜色做了像Jerry Nixon所说的那样。

<SolidColorBrush x:Key="ButtonColor" Color="Blue" />

我将使用此行在我的按钮中访问它

Background="{StaticResource ButtonColor}"

之后我在MainPage.xaml.cs中创建了这个按钮的位置。

void ChangeTheme(Uri source)
    {   // Recreated my Merged dictinaries at the app.xaml

        var _Custom = new ResourceDictionary { Source = source };
        var _Main = new ResourceDictionary { MergedDictionaries = { _Custom } };
        App.Current.Resources = _Main;


        // This is needed to basiclly Refresh the page since we use Static Resources.
        // so we navigate forth and back to the whole frame.

        var _Frame = Window.Current.Content as Frame;
        _Frame.Navigate(_Frame.Content.GetType());
        _Frame.GoBack();
    }

然后我在每个按钮上添加了这个代码,只是根据我想要的颜色改变了源代码(如果我想要蓝色它是 - &gt; Style.Blue.xaml代表红色 - &gt; Style.Red.xaml)和ms -appx:/ StyleColors /是路径。我为我的所有样式创建了一个文件夹。

private void ColorChange_Click(object sender, RoutedEventArgs e)
        {
            ChangeTheme(new Uri("ms-appx:/StyleColors/Style.Blue.xaml"));
        }

现在使用一行代码我可以更改所有按钮的颜色或我需要的其他类型的数据。

我希望它也可以帮助更多人。