使用数据绑定xaml UWP更改其他页面中网格的颜色

时间:2017-09-15 12:56:59

标签: xaml data-binding uwp

我在UWP应用程序中有一个网格在MainPage和BlankPage1中的另一个网格,我想同时在主页和GridPage中使用数据绑定更改网格的颜色。

代码。

颜色等级:

class ColorGridClass : INotifyPropertyChanged
{
    private SolidColorBrush _coloreGenerale = new SolidColorBrush(Color.FromArgb(255, 16, 111, 151));
    public SolidColorBrush ColoreGenerale
    {
        get => _coloreGenerale;
        set
        {
            _coloreGenerale = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ColoreGenerale)));
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

MainPage xaml:

 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.DataContext>
        <local:ColorGridClass x:Name="ColorOfGrid" ColoreGenerale="Aquamarine"/>
    </Grid.DataContext>
    <Button x:Name="btnChangeColor" Content="Change Color" Click="btnChangeColor_Click" HorizontalAlignment="Left" Margin="10,10,0,0" Foreground="{Binding }" VerticalAlignment="Top"/>
    <Grid Background="{Binding ColoreGenerale, Mode=OneWay}" HorizontalAlignment="Left" Height="500" Margin="10,52,0,0" VerticalAlignment="Top" Width="500">
        <TextBlock Text="Grid One" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="30,30,0,0"/>
    </Grid>
    <Frame x:Name="MainFrame" Content="" HorizontalAlignment="Left" Margin="532,10,0,0" VerticalAlignment="Top" Height="1060" Width="1378"/>
</Grid>

MainPage xaml.cs:

public MainPage()
{
    this.InitializeComponent();
    MainFrame.Navigate(typeof(BlankPage1));
}

private void btnChangeColor_Click(object sender, RoutedEventArgs e)
{
    ColorOfGrid.ColoreGenerale = new SolidColorBrush(Colors.Blue);
}

BlankPage1 xaml:

<Grid Background="LightSalmon">
    <Grid.DataContext>
        <local:ColorGridClass x:Name="ColorOfGrid" ColoreGenerale="Aquamarine"/>
    </Grid.DataContext>
    <TextBlock Text="Page1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="30,30,0,0"/>
    <Grid Background="{Binding ColoreGenerale, Mode=OneWay}" HorizontalAlignment="Center" Height="500" Margin="0" VerticalAlignment="Center" Width="500">
        <TextBlock Text="Grid Two" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="30,30,0,0"/>
    </Grid>
</Grid>

如何使用数据绑定更改第二个网格的颜色?

提前致谢。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您希望在整个应用程序中保持一致性,您可以使用Application.Resources并创建SolidColorBrush并使用它来绑定颜色/在需要的地方更改颜色。

在App.xaml中创建Application.Resources并添加要用作默认SolidColorBrush的{​​{1}}。在我的情况下,我想使用Background

Red

现在将您的<Application.Resources> <SolidColorBrush x:Key="GridColorSolidBrush" Color="Red" /> </Application.Resources> Mainpage.xaml网格BlankPage.xaml更改为此资源Background。如下所示。

Key

现在,在您的Button.Tapped事件中,您可以更改颜色,如下所示。

<Grid Background="{StaticResource GridColorSolidBrush}">

这将改变所有(Application.Current.Resources["GridColorSolidBrush"] as SolidColorBrush).Color = Colors.Green; 的颜色(在本例中为FrameworkElements)。

Here你可以找到一个简单的GitHub回购。

以下是我的示例程序的输出。

enter image description here