使用数据绑定xaml更改其他页面中网格的颜色UWP
问题描述:
我在UWP应用程序中有一个网格在MainPage和另一个网格BlankPage1中,我想同时更改MainPage中网格的颜色和数据绑定的BlankPage1中的网格。使用数据绑定xaml更改其他页面中网格的颜色UWP
代码。
颜色类:
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;
}
XAML的MainPage:
<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>
如何使用数据绑定更改第二个网格的颜色?
在此先感谢。
答
在这种情况下,如果您想保持应用程序的一致性,您可以使用Application.Resources
并创建SolidColorBrush
并使用它来绑定颜色/在需要的地方更改颜色。
在App.xaml中创建Application.Resources并添加一个SolidColorBrush
,您要将其用作默认Background
。在我的情况下,我想使用Red
。
<Application.Resources>
<SolidColorBrush x:Key="GridColorSolidBrush" Color="Red" />
</Application.Resources>
现在改变你的Mainpage.xaml
和BlankPage.xaml
电网Background
这个资源Key
。如下所示。
<Grid Background="{StaticResource GridColorSolidBrush}">
现在在您的Button.Tapped事件中,您可以更改颜色,如下所示。
(Application.Current.Resources["GridColorSolidBrush"] as SolidColorBrush).Color = Colors.Green;
这将改变所有FrameworkElements
的颜色(在这种情况下Grid
)。
Here你可以找到一个简单的GitHub回购。
下面是我的示例程序的输出。
+1
不错!谢谢..完美.. – Res
你很可能达致这使用静态资源或ThemeResource – Razor
你怎么能举个例子? – Res
https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/resourcedictionary-and-xaml-resource-references。这应该让你开始 – Razor