簡體   English   中英

選擇其他按鈕時,ListView 突出顯示所選項目顏色不會保持不變

[英]ListView Highlight Selected Item Color is not staying on when selected other buttons

我在每個僅出現在選定項目上的列表/項目(加號和減號按鈕)上都有這個帶有 2 個按鈕的 ListView。 除了這些按鈕之外,所選項目還將顏色更改為 LightGray,並且預覽項目將為透明(效果很好)。

但是我遇到的問題是當我 select 一個項目然后單擊加/減按鈕時,它正在清除所選項目的顏色。 所以只有按鈕會保持打開狀態,但 BackgroundColor 消失了。

我一直在嘗試保持 LightGray 顏色,直到我 select 成為不同的項目。

因為我是新手,如果你能幫我舉個例子(如果可能的話),那就太好了。

如果需要更多信息,請告訴我。

太感謝了。

項目頁面.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>

項目頁面.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;
    }
  }

根據您的描述,我建議您可以使用CollectionView來替換 ListView。 然后使用Xamarin.Forms 視覺 State 管理器突出選定項目的背景顏色。

這是 ContentPage.Resource 中的 VisualStateManager。

 <ContentPage.Resources>
   
    <Style x:Key="stacklayoutStyle" TargetType="StackLayout">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />

                    <VisualState x:Name="Selected">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="LightGray" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
</ContentPage.Resources>

在 CollectionView 中使用此樣式。單擊 Button 時,選定的 state 將保持打開狀態。

 <CollectionView ItemsSource="{Binding items}" SelectionMode="Single">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <StackLayout Style="{StaticResource stacklayoutStyle}">
                        <Grid Margin="4,0,4,0" Padding="0,0,8,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <Label
                                Grid.Column="1"
                                FontSize="Medium"
                                Text="{Binding ItemName}" />
                            <Button Grid.Column="2" Text="decrement" />
                            <Entry
                                Grid.Column="3"
                                Text="{Binding ItemQuantity}"
                                VerticalTextAlignment="Center" />
                            <Button Grid.Column="4" Text="Increment" />
                        </Grid>
                       
                    </StackLayout>
                </DataTemplate>
            </CollectionView.ItemTemplate>

        </CollectionView>

好吧,當您點擊任何其他視圖(如按鈕或其他東西)時,列表視圖失去了焦點。 當列表視圖沒有聚焦時,它的背景顏色將會丟失。

但是,嘗試直接設置 listView 的背景顏色可能會給您想要的。 注意:我還沒有在我的 PC 上嘗試過這段代碼,看看它是否能解決你的問題,但試一試,讓我知道你的結果。

    if (viewCell.BackgroundColor != null)
    {
        lstView.BackgroundColor = Color.LightGray;
        // Other lines of code
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM