Disable/Enable applicationbar Button in runtime wi

2019-09-01 04:54发布

问题:

In this part of the code is the event TextChanged to enable the button in te applicationbar.

C#:

private void Textbox_TextChanged(object sender, EventArgs e)
{
    ApplicationBarIconButton btn_guardar = ApplicationBar.Buttons[0] as applicationBarIconButton;

    if (!string.IsNullOrEmpty(txt_nom_usuario.Text) && !string.IsNullOrEmpty(txt_edad_usuario.Text) && !string.IsNullOrEmpty(txt_peso_usuario.Text))
    {
        btn_guardar.IsEnabled = true;
    }
    else
        btn_guardar.IsEnabled = false; 
}

XAML:

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar Mode="Default" IsVisible="True">
        <shell:ApplicationBarIconButton x:Name="btn_guardar" IconUri="/icons/appbar.save.rest.png" Text="Guardar" Click="btn_guardar_Click" IsEnabled="False" />
        <shell:ApplicationBarIconButton x:Name="btn_atras" IconUri="/icons/appbar.back.rest.png" Text="Atrás" Click="btn_atras_Click" />
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

<TextBlock x:Name="lbl_ingresanombre" Height="39" Margin="60,28,0,0" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Width="248" FontSize="29.333" FontFamily="{StaticResource Helvetica}"><Run Text="Ingresa "/><Run Text="tu nombre"/></TextBlock>
<TextBox x:Name="txt_nom_usuario" Height="63" Margin="47,58,69,0" TextWrapping="Wrap" Text="&#xa;" FontSize="21.333" VerticalAlignment="Top" IsEnabled="True" />

<TextBlock x:Name="lbl_edad" Height="38" Margin="60,117,0,0" TextWrapping="Wrap" Text="Ingresa tu edad" VerticalAlignment="Top" FontSize="29.333" HorizontalAlignment="Left" FontFamily="{StaticResource Helvetica}"/>
<TextBox x:Name="txt_edad_usuario" InputScope="TelephoneLocalNumber" Height="63" TextWrapping="Wrap" Text="&#xa;" FontSize="21.333" Margin="47,147,69,0" VerticalAlignment="Top" MaxLength="3" />

<TextBlock x:Name="lbl_peso" Height="42" Margin="60,0,0,178" TextWrapping="Wrap" Text="Peso" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="74" FontSize="29.333" d:LayoutOverrides="HorizontalAlignment" FontFamily="{StaticResource Helvetica}"/>
<TextBox x:Name="txt_peso_usuario" InputScope="TelephoneLocalNumber" Margin="47,0,69,125" TextWrapping="Wrap" Text="&#xa;" FontSize="21.333" Height="63" VerticalAlignment="Bottom"/>

回答1:

The application bar doesn't support some basic features when it is set in XAML. You'll have to create the bar and buttons and/or menu items through code.

Here's an example how you can create the bar and add controls to it. The controls can then be accessed later from code:

//button
var appBarButton = new ApplicationBarIconButton
{
    IconUri = new Uri("/Images/YourImage.png", UriKind.Relative),
    Text = "click me"
};
appBarButton.Click += new EventHandler(appBarButton_Click);

//menu item
ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem
{
    Text = "a menu item"
}
appBarMenuItem.Click += new EventHandler(appBarMenuItem_Click);

//application bar

//Note that this is not a variable declaration
//'ApplicationBar' is a property of 'PhoneApplicationPage'

ApplicationBar = new ApplicationBar();
ApplicationBar.Buttons.Add(appBarButton);
ApplicationBar.MenuItems.Add(appBarMenuItem);

//the events
private void appBarButton_Click(object sender, EventArgs e)
{
}

private void appBarMenuItem_Click(object sender, EventArgs e)
{
}

When all this is done, you've created your own ApplicationBar through code. Now you can change the properties from code, like this:

var theButton = (ApplicationBarIconButton)ApplicationBar.Buttons[0];

if(someCondition)
{
    theButton.IsEnabled = true;
}
else
{
    theButton.IsEnabled = false;
}

//or shorter:
theButton.IsEnabled = someCondition

This is just an example. In the TextChanged events you can also access the ApplicationBar controls. In these events you can place above code to change the ApplicationBarButton. Hope this clears things up for you! More reading and info:

  • ApplicationBar Class
  • PhoneApplicationPage.ApplicationBar Property
  • How to change app bar icon buttons and menu items dynamically