考虑这个示例代码
<Grid Name="MyParentGrid">
<Grid.Background>
<ImageBrush ImageSource="Test.jpg"/>
</Grid.Background>
<HyperlinkButton Name="Play" Click="Play_Click" Background="Black"/>
<HyperlinkButton Name="Personalize"Click="Personalize_Click" Background="Black"/>
<HyperlinkButton Name="LeaderBoard" Click="LeaderBoard_Click" Background="Black"/>
</Grid>
我现在拥有的是网格内的三个按钮,背景是照片。
现在如果我想让用户点击按钮查看另一个背景而不是Test.jpg
,也可以更改按钮背景颜色,
在我的源代码中我有很多网格,里面有很多画布,很多hyberlinkbuttons和滑块......等等,很多颜色,边距“这个按钮的位置”和属性和内容需要是当用户通过选择另一个界面来更改它们时更改
我尝试制作多个网格“ParentGrid1”和“ParentGrid2”然后开始更改每个网格的可见性,以及大量复制和粘贴代码“spaghetti code”,如何让用户通过点击完全更改界面具有良好编写代码的按钮??
答案 0 :(得分:0)
为了说明,我修改了你的xaml:
<Grid Name="MyParentGrid">
<Grid.Background>
<ImageBrush ImageSource="ms-appx:///Assets/Test.jpg"/>
</Grid.Background>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<HyperlinkButton Name="Play" Click="Play_Click" Background="Black" Content="Play"/>
<HyperlinkButton Name="Personalize" Click="Personalize_Click" Background="Black" Content="Personalize"/>
<HyperlinkButton Name="LeaderBoard" Click="LeaderBoard_Click" Background="Black" Content="Leaderboard"/>
</StackPanel>
</Grid>
在后面的代码中执行了以下操作:
private static BitmapImage first;
private static BitmapImage second;
private static ImageBrush backBrush;
public MainPage()
{
this.InitializeComponent();
first = new BitmapImage(new Uri("ms-appx:///Assets/Test.jpg"));
second = new BitmapImage(new Uri("ms-appx:///Assets/NewBackground.jpg"));
backBrush = new ImageBrush();
SetBackground();
}
private void SetBackground()
{
if(backBrush.ImageSource == first)
{
backBrush.ImageSource = second;
}
else
{
backBrush.ImageSource = first;
}
MyParentGrid.Background = backBrush;
}
private void Personalize_Click(object sender, RoutedEventArgs e)
{
SetBackground();
}
前两个(Type BitmapImage)用于表示不同的背景图像。第三个是用于设置Grid的Background属性的画笔。每个都在构造函数中初始化。 如果当前背景图像是第一个图像,SetBackground()方法只是切换到第二个图像,否则切换到第二个图像。