Сбросить значения стиля через файл c # в Click Event - PullRequest
1 голос
/ 30 апреля 2019

У меня есть стиль кнопки, объявленный в Xaml, я сделал событие клика в своем файле C #, чтобы при нажатии изменить какой-либо стиль, но теперь, при повторном нажатии, я хочу сбросить мои стили до начального стиля.Как я могу управлять кликами и сбросить стиль?

<flv:FlowListView FlowColumnCount="3" SeparatorVisibility="None" HasUnevenRows="true"
                    FlowItemTappedCommand="{Binding ItemTappedCommand}" FlowLastTappedItem="{Binding LastTappedItem}"
                    FlowItemsSource="{Binding MyCategories}" >

    <flv:FlowListView.FlowColumnTemplate>
      <DataTemplate>
         <Button Text="{Binding Name}"
         TextColor="White"
         x:Name="categoryButtons"
         Clicked="ButtonSelected"
         ContentLayout="Top"
         BackgroundColor="Transparent"
         BorderColor="White"
         BorderWidth="2"
         CornerRadius="6"
         Margin="5,5,5,10" />
      </DataTemplate>
   </flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>
public void ButtonSelected(object sender, EventArgs e)
        {
            var button = (Button)sender;
            button.BackgroundColor = Color.Blue;
        }

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Итак, я сделал это, чтобы сбросить стиль до значения по умолчанию:

public partial class CategoriesMenuDetail : ContentPage
    {
        public Dictionary<int, Btn> buttons { get; set; }

        public CategoriesMenuDetail()
        {
            InitializeComponent();
            buttons = new Dictionary<int, Btn>();
        }

        public void ButtonSelected(object sender, EventArgs e)
        {          
            var button = (Button)sender;

            if (!buttons.ContainsKey(button.GetHashCode()))
            {
                buttons.Add(button.GetHashCode(), new Btn(button));
            }

            bool state = buttons[button.GetHashCode()].Toogle();

            var bgColor = (state) ? Color.FromHex("#26047AD5") : Color.FromHex("#40000000");
            var borderColor = (state) ? Color.FromHex("#FF8A00") : Color.FromHex("#FFFFFF");

            button.BackgroundColor = bgColor;
            button.BorderColor = borderColor;
        }
    }

    public  class Btn
    {
        private Button _button { get; set; }

        private bool isToogle = false;

        public Btn(Button button)
        {
            _button = button;
        }

        public bool Toogle()
        {
            isToogle = !isToogle;
            return isToogle;
        }
    }
0 голосов
/ 30 апреля 2019

Хорошо, тогда ваш FlowItemsSource равен Binded для вашего ObservableCollection<Category> или любого типа объекта модели, который вы используете. Кнопка в вашем шаблоне данных привязана к свойству Name вашего класса Category.

Назначьте триггер для вашей кнопки следующим образом, а затем при нажатии кнопки установите свойство в объекте модели на true / false в зависимости от текущего состояния.

<Button
    Text="{Binding Name}"
    TextColor="White"
    Command="{Binding ToggleCommand}"
    ContentLayout="Top"
    BackgroundColor="Transparent"
    BorderColor="White"
    BorderWidth="2"
    CornerRadius="6"
    Margin="5,5,5,10" >
    <Button.Triggers>
        <DataTrigger
            TargetType="Button"
            Binding="{Binding IsToggled}"
            Value="True">
            <Setter Property="BackgroundColor" Value="Blue" />
        </DataTrigger>
    </Button.Triggers>
</Button>

Также, как показано выше, я бы предложил добавить свойство ICommand в ваш класс Category, чтобы выполнить изменение свойства bool.

Команда / код для объекта модели Категория будет выглядеть так:

//Constructor
public Category()
{
    ToggleCommand = new Command(() =>
    {
        IsToggled = !IsToggled;
        NotifyPropertyChanged(nameof(IsToggled));
    };
}

public ICommand ToggleCommand { get; }

public bool IsToggled { get; set; }

Затем, когда ваше состояние будет переключено на true , кнопка изменит цвет на синий, а затем, когда false , вернется к исходному прозрачному значению.

Также убедитесь, что класс Category реализует INotifyPropertyChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...