在主窗口中为Button添加了事件处理程序,它在页面中不起作用

时间:2014-07-17 21:48:35

标签: c# wpf xaml event-handling

我正在使用WPF来完成我非常简单的项目。我使用Page类创建了登录页面,那里有两个控件。它们是Button和TextBox。然后我通过Frame在主窗口中使用此页面。在主窗口中,我试图在“Click”事件上向Button添加事件处理程序,但为什么它不起作用。没有错误消息或其他任何东西。我试图调试,但它没有进入方法。

这是页面代码:

<Page x:Class="BJack.LoginPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
    Title="LoginPage">

    <Page.Resources>
        <Style TargetType="TextBox" x:Key="txtHint">
            <Style.Triggers>
                <Trigger Property="IsKeyboardFocused" Value="False">
                    <Setter Property="Text" Value="Login" />
                    <Setter Property="Foreground" Value="#FFB8A8A8" />
                </Trigger>
            </Style.Triggers>
            <Style.Setters>
                <Setter Property="Height" Value="25" />
                <Setter Property="FontSize" Value="16" />
                <Setter Property="Width" Value="300" />
            </Style.Setters>
        </Style>
    </Page.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>

        <StackPanel VerticalAlignment="Center">
            <TextBox Name="txtLogin" Style="{StaticResource ResourceKey=txtHint}"></TextBox>
            <Button Grid.Row="1" Height="30" Width="150" Margin="0 30 0 0" Name="enterButton">Enter</Button>
        </StackPanel>

    </Grid>
</Page>

这是一个MainWindow代码:

public partial class MainWindow : Window
{
    LoginPage lPage = new LoginPage();

    public MainWindow()
    {
        InitializeComponent();
        InitializeProgramm();
    }

    private void InitializeProgramm()
    {
        mainFrame.NavigationService.Navigate(new Uri("LoginPage.xaml", UriKind.Relative));
        lPage.enterButton.Click += enterButton_Click;
    }

    void enterButton_Click(object sender, RoutedEventArgs e)
    {
        if (lPage.txtLogin.Text.Length > 0)
        {
            mainFrame.Navigate(new Uri("GamePage.xaml", UriKind.Relative));
            this.WindowState = System.Windows.WindowState.Maximized;
        }
    }

    private void mainWin_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Keyboard.ClearFocus();
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个解决方案

private void InitializeProgramm()
{
    mainFrame.NavigationService.Navigate(lPage);
    lPage.enterButton.Click += enterButton_Click;
}

这会将实例lPage设置为您已附加事件处理程序而不是新创建的实例的mainFrame的内容