【发布时间】:2021-08-21 19:35:55
【问题描述】:
我在每个仅出现在选定项目上的列表/项目(加号和减号按钮)上都有这个带有 2 个按钮的 ListView。 除了这些按钮之外,所选项目的颜色也会更改为 LightGray,并且预览项目将是透明的(效果很好)。
但是我遇到的问题是当我选择一个项目然后单击加号/减号按钮时,它会清除所选项目的颜色。 所以只有按钮会保持亮着,但 BackgroundColor 会消失。
我一直在尝试保持 LightGray 颜色,直到我选择不同的项目。
由于我是新手,如果您能帮我举一些例子,那就太好了(如果可能的话,请)。
如果需要更多信息,请告诉我。
非常感谢。
ItemsPage.xaml
<ListView ItemsSource="{Binding Items, Mode=TwoWay}" x:Name="lstView" SelectedItem="{Binding SelectedItem}" HasUnevenRows="True" RowHeight="50">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="0,0,8,0" Margin="4,0,4,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="7*"/>
</Grid.ColumnDefinitions>
<Grid.GestureRecognizers>
<TapGestureRecognizer NumberOfTapsRequired="1" Tapped="TapGestureRecognizer_Edit1" CommandParameter="{Binding ItemId}"/>
</Grid.GestureRecognizers>
<Label Text="{Binding ItemName}" Grid.Column="1" FontSize="Medium"></Label>
<Image Source="DecreaseIcon1.png" Grid.Column="2" Margin="4" IsVisible="{Binding IsVisible}">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="DecrementQuantity" CommandParameter="{Binding ItemId}"/>
</Image.GestureRecognizers>
</Image>
<Entry Text="{Binding ItemQuantity}" Grid.Column="3" VerticalTextAlignment="Center"/>
<Image Source="IncreaseIcon1.png" Grid.Column="4" Margin="4" IsVisible="{Binding IsVisible}">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="IncrementQuantity" CommandParameter="{Binding ItemId}"/>
</Image.GestureRecognizers>
</Image>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ItemsPage.cs
private void IncrementQuantity(object sender, EventArgs e)
{
TappedEventArgs tappedEventArgs = (TappedEventArgs)e;
Item item = ((ItemViewModel)BindingContext).Items.Where(x => x.ItemId == (Guid)tappedEventArgs.Parameter).FirstOrDefault();
var oldQuantity = item.ItemQuantity++;
}
private void DecrementQuantity(object sender, EventArgs e)
{
TappedEventArgs tappedEventArgs = (TappedEventArgs)e;
Item item = ((ItemViewModel)BindingContext).Items.Where(x => x.ItemId == (Guid)tappedEventArgs.Parameter).FirstOrDefault();
var oldQuantity = item.ItemQuantity--;
}
Grid lastGrid;
private void TapGestureRecognizer_Edit1(object sender, EventArgs e)
{
TappedEventArgs tappedEventArgs = (TappedEventArgs)e;
Item item = ((ItemViewModel)BindingContext).Items.Where(x => x.ItemId == (Guid)tappedEventArgs.Parameter).FirstOrDefault();
_item = item;
var grid = sender as Grid;
lstView.SelectedItem = grid.BindingContext;
if (lastGrid != null)
{
lastGrid.BackgroundColor = Color.Transparent;
}
var viewCell = (Grid)sender;
if (viewCell.BackgroundColor != null)
{
viewCell.BackgroundColor = Color.LightGray;
lastGrid = viewCell;
}
}
【问题讨论】:
标签: c# xaml xamarin gridview cross-platform