即使有其他答案,我也会张贴这个,因为我尝试了很多解决方案,但我找不到适合我的问题。
我做了一些截图来更好地解释自己。
我的应用程序看起来像这样:
A,B,C,D和灰色的是简单的按钮。
如果我点击A,我希望内容改变,变成这样:
如果我点击B,C,D相同,但内容会有所不同。
进一步深入,我希望按钮E,F,G,H和更多in-depht按钮发生同样的事情。 (所有应用程序都基于4键设计)。
到目前为止,我使用以下XAML代码构建了应用程序主窗口的设计:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Name="RootWindow" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition Height="10"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Button Name="Audiovisiva" Grid.Row="0" Grid.Column="0" Background="Yellow" FontWeight="Bold" FontSize="24" Foreground="#FF7F00FF" >A</Button>
<Button Name="Orientamento" Grid.Row="0" Grid.Column="1" Background="Red" Foreground="#FF00FF15" FontSize="24" FontWeight="Bold">B</Button>
<Button Name="Button3" Grid.Row="1" Grid.Column="0" Background="#FFB900FF" Foreground="#FFFBFF00" FontSize="24" FontWeight="Bold">C</Button>
<Button Name="Button4" Grid.Row="1" Grid.Column="1" Background="#FF00EBFF" Foreground="#FFFFC902" FontSize="24" FontWeight="Bold">D</Button>
<Button Name="Button5" Grid.Row="4" Grid.Column="0">Back</Button>
<Button Name="Button6" Grid.Row="4" Grid.Column="1">Next</Button>
</Grid>
</Window>
我的问题是:在这种情况下,是否有一种显示动态内容的聪明方法? (我是WPF编程的新手,所以请解释我以及可能)。
请记住,会有很多可能的图层,因为每个按钮都必须“生成”一组新的4个按钮,每次深入到应用程序内部。
感谢您提供给我的任何帮助!
编辑:
不,一旦我点击“A”,没有“A”会重复。主要目标是创建一个套件,您可以在其中选择A,B,C,D之间的选项,如果您得到“A”,下一个视图将显示4个按钮,可在“A”的不同选项之间进行选择功能。举个例子,假设如果我选择“阅读”功能,在下一个视图中我可以选择“开始”,“选项”,“某事”,“主页”。如果我按“开始”我想启动我的应用程序核心(在这种情况下,阅读练习),如果我按“选项”我想在“阅读速度”,“字体大小”ecc ...之间进行选择设置我的阅读练习选项,如果按“其他东西”将会完成,如果我按“主页”我想回到第一个屏幕。
主要目的是在4个按钮屏幕之间导航以设置选项,然后按“开始”按钮开始个性化练习。
我希望我能很好地解释自己。
答案 0 :(得分:0)
您希望展示的新功能有哪些内容?
您只需要在每个方块的按钮中添加buttonclickevents。 例如:
Button Name =“Audiovisiva”Grid.Row =“0”Grid.Column =“0”Background =“Yellow”FontWeight =“Bold”FontSize =“24”Foreground =“#FF7F00FF”Button.Click =“Button1_Click “&gt;
然后
private void button1_Click(object sender,EventArgs e) { //在这里行动 }
我认为,在网格的顶部,你放了4个画布,你可以很容易地改变内容的格式。 像canvas.content =“image”
答案 1 :(得分:0)
使用来自您的帖子/编辑的信息以及DataBinding
这里的一些工作示例。
首先创建一个类Item,其中a)表示按钮b)保存按钮信息,c)是复合模式
因此Item
可以{/ 1}}内置
Items
这是MainWindow.xaml
public class Item
{
public Item(string letter, Brush back, Brush front)
{
Letter = letter;
BackColor = back;
FrontColor = front;
}
public Item(string letter, Brush back, Brush front, List<Item> items)
: this(letter, back, front)
{
Items = items;
}
public List<Item> Items { get; set; }
public string Letter { get; set; }
public Brush BackColor { get; set; }
public Brush FrontColor { get; set; }
}
这是MainWindow.cs
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfApplication1="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type wpfApplication1:Item}">
<Button Content="{Binding Letter}" Foreground="{Binding FrontColor}" Background="{Binding BackColor}" Click="Button_OnClick" Tag="{Binding}"/>
</DataTemplate>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition Height="10"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" Grid.Column="0" Content="{Binding Items[0]}"/>
<ContentPresenter Grid.Row="0" Grid.Column="1" Content="{Binding Items[1]}"/>
<ContentPresenter Grid.Row="1" Grid.Column="0" Content="{Binding Items[2]}"/>
<ContentPresenter Grid.Row="1" Grid.Column="1" Content="{Binding Items[3]}"/>
<Button Name="Button5" Grid.Row="4" Grid.Column="0">Back</Button>
<Button Name="Button6" Grid.Row="4" Grid.Column="1">Next</Button>
</Grid>
此示例应该开箱即用。要自定义关注我的代码
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
Items = BuildItems();
InitializeComponent();
}
private List<Item> BuildItems()
{
var list = new List<Item>();
// Add option "A" with suboptions
list.Add(new Item("A", Brushes.Red, Brushes.Yellow, new List<Item>
{
new Item("E", Brushes.Green, Brushes.Black),
new Item("F", Brushes.LightBlue, Brushes.Black),
new Item("G", Brushes.Red, Brushes.Black),
new Item("H", Brushes.LemonChiffon, Brushes.Black)
}));
// Add option "B"
list.Add(new Item("B", Brushes.Yellow, Brushes.Green));
// Add option "C"
list.Add(new Item("C", Brushes.Blue, Brushes.Yellow));
// Add option "D"
list.Add(new Item("D", Brushes.GreenYellow, Brushes.Yellow));
return list;
}
private List<Item> item;
public List<Item> Items
{
get { return item; }
set
{
if (item != value)
{
item = value;
OnPropertyChanged("Items");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
private void Button_OnClick(object sender, RoutedEventArgs e)
{
var item = (sender as Button).Tag as Item;
if (item != null && item.Items != null)
Items = item.Items;
}
}
。在这一点上,您的要求非常灵活。但是,通过一些更深入的wpf知识,可以对代码进行一些改进(使用ICommand,ViewModels等)。
希望我能帮忙