Как сделать кнопку программно видимой в 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 ответа
У вас есть свойство видимости.
У вас есть несколько способов сделать это:
Просто в коде позади вы должны:
if (condition) { DeleteButton.Visibility = Visibility.Visible; //Also possible to Collapse (hide). }
Приведенный выше код должен помочь вам сделать кнопку невидимой и видимой соответственно.
Примечание. Это менее предпочтительно, оно не динамично и может привести к дублированию и ненужному коду.
Лучший способ и более динамичный:
Вы можете создать свойство 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