C# 在WPF C中发送值时无法从一页转到新页#
在我的MainWindow.xaml.cs中,我使用以下命令打开一个新页面(PkmnSelect):C# 在WPF C中发送值时无法从一页转到新页#,c#,wpf,window,C#,Wpf,Window,在我的MainWindow.xaml.cs中,我使用以下命令打开一个新页面(PkmnSelect): PkmnSelect pkmnSelect = new PkmnSelect(); Content = pkmnSelect; 然后,一旦用户在此页面(PkmnSelect)中选择了他们的神奇宝贝团队,他们就可以单击开始。“开始”按钮具有以下代码: Battle battle = new Battle(userPokemon, opponentPokemon); Content = batt
PkmnSelect pkmnSelect = new PkmnSelect();
Content = pkmnSelect;
然后,一旦用户在此页面(PkmnSelect)中选择了他们的神奇宝贝团队,他们就可以单击开始。“开始”按钮具有以下代码:
Battle battle = new Battle(userPokemon, opponentPokemon);
Content = battle;
Battle是一个我想将两个神奇宝贝[]作为输入的页面,因此我在Battle中创建了一个额外的构造函数,如下所示:
public Battle(Pokemon[] userPkmn, Pokemon[] opponentPkmn) : this()
{
userPokemon = userPkmn;
opponentPokemon = opponentPkmn;
}
这给了我一个错误:“页面只能将窗口或框架作为父对象。”
我的问题是,将值从一个页面发送到另一个页面的正确方式是什么?
我到处都找过了,我试过的都没用
编辑:Battle.xaml.cs的开始:
public partial class Battle : Page
{
Pokemon[] userPokemon;
Pokemon[] opponentPokemon;
public Battle()
{
InitializeComponent();
//Some code to hide some xaml stuff and start some music
}
public Battle(Pokemon[] userPkmn, Pokemon[] opponentPkmn) : this()
{
userPokemon = userPkmn;
opponentPokemon = opponentPkmn;
}
在
页面
中不能有页面
相反,您应该让它们的公共父组件使用事件处理转换:
public class Pokemon
{
public string Name { get; set; }
}
<Page x:Class="WpfApp1.Battle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Battle">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{Binding UserPokemon.Name}" FontSize="40" FontWeight="ExtraBold"></Label>
<Label VerticalContentAlignment="Center" FontSize="20" FontWeight="ExtraBold" Grid.Column="1">VS</Label>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{Binding OpponentPokemon.Name}" FontSize="40" FontWeight="ExtraBold" Grid.Column="2"></Label>
</Grid>
</Page>
public partial class Battle : Page
{
public Pokemon UserPokemon { get; set; }
public Pokemon OpponentPokemon { get; set; }
public Battle()
{
InitializeComponent();
DataContext = this;
}
public Battle(Pokemon userPkmn, Pokemon opponentPkmn) : this()
{
UserPokemon = userPkmn;
OpponentPokemon = opponentPkmn;
}
}
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">
<local:PkmnSelect PokemonsSelected="PkmnSelect_PokemonsSelected"></local:PkmnSelect>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PkmnSelect_PokemonsSelected(object sender, PokemonsSelectedEventArgs e)
{
Content = new Battle(e.FirstPokemon, e.SecondPokemon);
}
}
口袋妖怪
:
public class Pokemon
{
public string Name { get; set; }
}
<Page x:Class="WpfApp1.Battle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Battle">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{Binding UserPokemon.Name}" FontSize="40" FontWeight="ExtraBold"></Label>
<Label VerticalContentAlignment="Center" FontSize="20" FontWeight="ExtraBold" Grid.Column="1">VS</Label>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{Binding OpponentPokemon.Name}" FontSize="40" FontWeight="ExtraBold" Grid.Column="2"></Label>
</Grid>
</Page>
public partial class Battle : Page
{
public Pokemon UserPokemon { get; set; }
public Pokemon OpponentPokemon { get; set; }
public Battle()
{
InitializeComponent();
DataContext = this;
}
public Battle(Pokemon userPkmn, Pokemon opponentPkmn) : this()
{
UserPokemon = userPkmn;
OpponentPokemon = opponentPkmn;
}
}
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">
<local:PkmnSelect PokemonsSelected="PkmnSelect_PokemonsSelected"></local:PkmnSelect>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PkmnSelect_PokemonsSelected(object sender, PokemonsSelectedEventArgs e)
{
Content = new Battle(e.FirstPokemon, e.SecondPokemon);
}
}
PkmnSelect
<Page x:Class="WpfApp1.PkmnSelect"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="PkmnSelect">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ListBox Name="FirstPokemonList">
<system:String>Pikachu</system:String>
<system:String>Raichu</system:String>
<system:String>Rattata</system:String>
</ListBox>
<Label Grid.Column="1" VerticalContentAlignment="Center" FontSize="20" FontWeight="ExtraBold">VS</Label>
<ListBox Name="SecondPokemonList" Grid.Column="2" Margin="0,1,0,19" Grid.RowSpan="2">
<system:String>Pikachu</system:String>
<system:String>Raichu</system:String>
<system:String>Rattata</system:String>
</ListBox>
<Button Click="Button_Click" Grid.Row="1" Grid.ColumnSpan="3">FIGHT!</Button>
</Grid>
</Page>
public class PokemonsSelectedEventArgs : EventArgs
{
public Pokemon FirstPokemon { get; set; }
public Pokemon SecondPokemon { get; set; }
}
public partial class PkmnSelect : Page
{
public event EventHandler<PokemonsSelectedEventArgs> PokemonsSelected = delegate { };
public PkmnSelect()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
PokemonsSelected(this, new PokemonsSelectedEventArgs
{
FirstPokemon = new Pokemon { Name = (string)FirstPokemonList.SelectedValue },
SecondPokemon = new Pokemon { Name = (string)SecondPokemonList.SelectedValue }
});
}
}
主窗口
:
public class Pokemon
{
public string Name { get; set; }
}
<Page x:Class="WpfApp1.Battle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Battle">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{Binding UserPokemon.Name}" FontSize="40" FontWeight="ExtraBold"></Label>
<Label VerticalContentAlignment="Center" FontSize="20" FontWeight="ExtraBold" Grid.Column="1">VS</Label>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{Binding OpponentPokemon.Name}" FontSize="40" FontWeight="ExtraBold" Grid.Column="2"></Label>
</Grid>
</Page>
public partial class Battle : Page
{
public Pokemon UserPokemon { get; set; }
public Pokemon OpponentPokemon { get; set; }
public Battle()
{
InitializeComponent();
DataContext = this;
}
public Battle(Pokemon userPkmn, Pokemon opponentPkmn) : this()
{
UserPokemon = userPkmn;
OpponentPokemon = opponentPkmn;
}
}
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">
<local:PkmnSelect PokemonsSelected="PkmnSelect_PokemonsSelected"></local:PkmnSelect>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PkmnSelect_PokemonsSelected(object sender, PokemonsSelectedEventArgs e)
{
Content = new Battle(e.FirstPokemon, e.SecondPokemon);
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有void PkmnSelect_pokemons selected(对象发送方,pokemons selectedeventargs e)
{
内容=新战斗(如第一口袋妖怪、第二口袋妖怪);
}
}
你能显示战斗代码吗?当然@尼古拉斯下面的代码是战斗的开始,除了剩下的方法@Nikolaus我也在问题中发布了它(不适合评论),我会尽快尝试!谢谢我对此解决方案有问题:我的主窗口显示以下错误:“PokemonSelected”成员无法识别或无法访问。我一直在阅读,人们都在谈论将任何CPU更改为x86的事情。。。我应该怎么做?这只是一个设计时错误,还是在运行时有问题?这很有效!这个错误只是设计时的错误,一旦我试着运行它,它就消失了。我想现在一切都好了。我将继续我的代码工作,并让你知道如果一切顺利!谢谢你,muchI并没有这么做,因为我的课程有点不同,但一切都很好。谢谢