【问题标题】:Xamarin issue, property isn't changed if you change it to the same property it was beforeXamarin 问题,如果您将其更改为与之前相同的属性,则属性不会更改
【发布时间】:2017-02-03 16:09:57
【问题描述】:

所以我想弄清楚为什么这会奏效,以及为什么我尝试的方法没有奏效。我有一个使用回收缓存策略的 ListView。我们有一个设置,用户可以切换以使其成为深色或浅色主题。因此,在使用深色主题时,单击其中一个单元格时,它具有此突出显示功能,可将单元格的背景颜色更改为灰色。这必须是一些默认行为,但 Xamarin 无法禁用此行为。任何人,为了解决这个问题,在我的 ViewCell 逻辑中,我设置了一个委托来将背景颜色更改为黑色(如果是深色主题)或白色(如果是浅色主题)。

这样:

this.Tapped += (s, e) => {
    this.View.BackgroundColor = App.IsDarkThemeEnabled() ? Xamarin.Forms.Color.Black : Xamarin.Forms.Color.White;
};

这有效....第一次。第一次单击单元格时,它会正确地将背景颜色更改为黑色或白色,从而覆盖 xamarin 默认提供的突出显示功能(但无法将其关闭)。但是,如果我回到同一个网格,然后单击同一个单元格。它没有改变背景颜色!震惊,我在委托中设置了一个断点,公平地说,它被命中但没有执行。

完全不知道这意味着什么,幸运的是我决定做一个简单的测试:

int x = 1;
//make sure to not have a highlight affect when tapping on a cell.
this.Tapped += (s, e) => {
    //this.View.BackgroundColor = App.IsDarkThemeEnabled() ? Xamarin.Forms.Color.Transparent : Xamarin.Forms.Color.White;
    if (x == 1) {
        this.View.BackgroundColor = App.IsDarkThemeEnabled() ? Xamarin.Forms.Color.Black : Xamarin.Forms.Color.White;
        x++;
    } else
        this.View.BackgroundColor = App.IsDarkThemeEnabled() ? Xamarin.Forms.Color.Blue : Xamarin.Forms.Color.White;
};

基本上第一次只做黑/白,之后的任何时候都是蓝/白。瞧!有效。第一次变黑,第二次变蓝。意识到这一点后,我只是将代码更改为:

this.Tapped += (s, e) => {
    this.View.BackgroundColor = App.IsDarkThemeEnabled() ? Xamarin.Forms.Color.Transparent : Xamarin.Forms.Color.White;
    this.View.BackgroundColor = App.IsDarkThemeEnabled() ? Xamarin.Forms.Color.Black : Xamarin.Forms.Color.White;
};

这行得通。所以如果它与以前的值相同,它基本上并没有真正改变属性?很奇怪,但想弄清楚为什么会这样?这是 Xamarin 错误吗?

【问题讨论】:

  • 这是一种非常常见的模式,如果您将属性设置为现有值,它将不会更新该值或触发 PropertyChanged 事件
  • 虽然我理解为什么会这样,但 Xamarin 将属性更改为灰色。我相信如果 Xamarin 为您提供默认行为而无法将其关闭,那么当我设置一个属性来解决这个问题时,它应该会反映更改。但是哦,好吧,你猜不是。谢谢!

标签: xamarin xamarin.forms


【解决方案1】:

误会的根源在你的评论中找到

虽然我理解为什么会这样,但 Xamarin 将属性更改为灰色。

Xamarin.Forms 平台根本不会在 Tap 上更改或修改 BackgroundColor 属性。视觉表示已更改,但属性未更改。剩下的问题是为什么在点击时不使用定义的背景颜色(黑色或白色)。根据提供的信息,我不知道这是您的代码还是 XF 中的问题。您可能应该用最少的重现案例提交错误。

【讨论】:

  • 你是对的。我知道“背景颜色”没有改变,这是 XF 自己做的事情。这是我的观点,他们提供了这个功能,但没有办法覆盖。除了设置背景颜色,这对你来说没有意义,因为它不是背景颜色的变化。
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2021-11-24
  • 2019-02-03
  • 2018-10-19
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多