Как сделать кнопку программно видимой в Windows Phone?

У меня есть кнопка с именем удалить. Я просто хочу сделать видимым только при соблюдении определенных условий, так как я могу это сделать??

Код XAML для создания кнопки

<Button x:Name="DeleteButton" Content="Delete" HorizontalAlignment="Left" Height="64" Margin="74,579,0,-9" VerticalAlignment="Top" Width="314" FontSize="24"/>

2 ответа

Решение

У вас есть свойство видимости.

У вас есть несколько способов сделать это:

  1. Просто в коде позади вы должны:

    if (condition)
    {
        DeleteButton.Visibility = Visibility.Visible; //Also possible to Collapse (hide).
    }
    

    Приведенный выше код должен помочь вам сделать кнопку невидимой и видимой соответственно.

    Примечание. Это менее предпочтительно, оно не динамично и может привести к дублированию и ненужному коду.

  2. Лучший способ и более динамичный:

    Вы можете создать свойство bool и привязать к нему кнопку видимости, например:

    bool IsVisible { get; set; } //Code behind
    

    И в xaml:

    <!-- Pay attention: The Converter is still not written, follow next steps -->
    <Button x:Name="DeleteButton" 
            Content="Delete"
            HorizontalAlignment="Left" Height="64" Margin="74,579,0,-9" 
            VerticalAlignment="Top" Width="314" FontSize="24" 
            Visibility="{Binding IsVisible, 
                         Converter={StaticResource BooleanToVisibilityConverter}}" />
    

    Конвертер:

    public class BooleanToVisibilityConverter : IValueConverter
    {
        /// <summary>
        /// Converts a value.
        /// </summary>
        /// <param name="value">The value produced by the binding source.</param>
        /// <param name="targetType">The type of the binding target property.</param>
        /// <param name="parameter">The converter parameter to use.</param>
        /// <param name="culture">The culture to use in the converter.</param>
        /// <returns>A converted value. Returns Visible if the value is true; otherwise, collapsed.</returns>
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool)value ? Visibility.Visible : Visibility.Collapsed;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    А на ресурсах в xaml вы должны добавить конвертер, чтобы вы могли получить к нему доступ через StaticResource:

    <Application
    x:Class="UI.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:converters="using:UI.Converters">
    
    <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    

    А затем, чтобы изменить свойство IsVisible для вашей необходимости, если true, оно будет связано с Visible, если false, оно будет свернуто.

    if (condition)
    {
        IsVisible = true;
    }
    

    Для получения дополнительной информации вы должны узнать: привязка, конвертеры.

Вы можете сделать это также с помощью xaml и binding:

в xaml:

<UserControl.Resources>
   <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>

тогда в контроле сделать что-то вроде:

Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}"

и IsVisible - это свойство bool во ViewModel

Другие вопросы по тегам