通过单击事件中的c#文件重置样式值

通过单击事件中的c#文件重置样式值,c#,xaml,xamarin,xamarin.forms,C#,Xaml,Xamarin,Xamarin.forms,我在Xaml中声明了一个按钮样式,我在C#文件中执行了一个单击事件,以在单击时更改某些样式,但现在,再次单击时,我想将样式重置为inicial样式。 如何管理单击和重置样式 <flv:FlowListView FlowColumnCount="3" SeparatorVisibility="None" HasUnevenRows="true" FlowItemTappedCommand="{Binding ItemTappedCommand}" Fl

我在Xaml中声明了一个按钮样式,我在C#文件中执行了一个单击事件,以在单击时更改某些样式,但现在,再次单击时,我想将样式重置为inicial样式。 如何管理单击和重置样式

<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>

好的,那么您的FlowItemsSource
绑定到您的
ObservableCollection
或您正在使用的任何模型对象类型。数据模板中的按钮绑定到
类别
类的名称属性

按如下所示为按钮指定触发器,然后单击按钮时,根据当前状态将模型对象中的属性设置为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>
然后,一旦您的状态切换到,按钮将变为蓝色,然后当它为时,它将返回到原始透明状态


另外,请确保您的类别类正在实现
INotifyPropertyChanged
好的,这样您的FlowItemsSource
绑定到您的
ObservableCollection
或您正在使用的任何模型对象类型。数据模板中的按钮绑定到
类别
类的名称属性

按如下所示为按钮指定触发器,然后单击按钮时,根据当前状态将模型对象中的属性设置为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>
然后,一旦您的状态切换到,按钮将变为蓝色,然后当它为时,它将返回到原始透明状态


另外,请确保您的类别类正在实现
INotifyPropertyChanged

,因此我将样式重置为默认:

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;
        }
    }
public分部类CategoriesMenuDetail:ContentPage
{
公共字典按钮{get;set;}
公共分类详细信息()
{
初始化组件();
按钮=新字典();
}
已选择公共无效按钮(对象发送者,事件参数e)
{          
var按钮=(按钮)发送器;
如果(!buttons.ContainsKey(button.GetHashCode()))
{
添加(button.GetHashCode(),新建Btn(button));
}
bool state=buttons[button.GetHashCode()].Toogle();
var bgColor=(状态)?Color.FromHex(#26047AD5”):Color.FromHex(#40000000);
var borderColor=(状态)?Color.FromHex(“#FF8A00”):Color.FromHex(“#FFFFFF”);
button.BackgroundColor=bgColor;
button.BorderColor=BorderColor;
}
}
公共类Btn
{
私有按钮_按钮{get;set;}
private bool isToogle=false;
公共Btn(按钮)
{
_按钮=按钮;
}
公共图书馆
{
iStogle=!iStogle;
返回iStogle;
}
}

因此我将样式重置为默认:

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;
        }
    }
public分部类CategoriesMenuDetail:ContentPage
{
公共字典按钮{get;set;}
公共分类详细信息()
{
初始化组件();
按钮=新字典();
}
已选择公共无效按钮(对象发送者,事件参数e)
{          
var按钮=(按钮)发送器;
如果(!buttons.ContainsKey(button.GetHashCode()))
{
添加(button.GetHashCode(),新建Btn(button));
}
bool state=buttons[button.GetHashCode()].Toogle();
var bgColor=(状态)?Color.FromHex(#26047AD5”):Color.FromHex(#40000000);
var borderColor=(状态)?Color.FromHex(“#FF8A00”):Color.FromHex(“#FFFFFF”);
button.BackgroundColor=bgColor;
button.BorderColor=BorderColor;
}
}
公共类Btn
{
私有按钮_按钮{get;set;}
private bool isToogle=false;
公共Btn(按钮)
{
_按钮=按钮;
}
公共图书馆
{
iStogle=!iStogle;
返回iStogle;
}
}

请不要多次问同一个问题times@Jason我之前的问题已经得到了回答,我现在可以在点击事件中更改按钮的颜色,我现在要做的是,无论何时在先前点击按钮后点击按钮,并相应地更改颜色,我想重置样式,就像选择和取消选择按钮作为用户的视觉表现一样,你明白我的意思吗?提前谢谢!然后,您需要保存按钮状态(您想要修改的任何属性集)并将其还原。@Jason好的,我可以在ResourceDictionary中保存初始按钮状态,但如何通过我的C#文件还原它?你能给我看一些代码吗?@LOLJovem尝试一下Button的自定义属性。如果需要,将样式更改为custome属性值。请不要多次询问相同的问题times@Jason我之前的问题已经得到了回答,我现在可以在点击事件中更改按钮的颜色,我现在试着做的是,每当按钮在之前被点击后被点击,并相应地改变颜色,我想重置样式,比如选择和取消选择按钮作为用户的视觉表现,你明白我的意思吗?提前谢谢!然后,您需要保存按钮状态(您想要修改的任何属性集)并将其还原。@Jason好的,我可以在ResourceDictionary中保存初始按钮状态,但如何通过我的C#文件还原它?你能给我看一些代码吗?@LOLJovem尝试一下Button的自定义属性。如果需要,将样式更改为custome属性值。我已经实现了给定的代码,但它现在不起作用