【发布时间】: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