2016-07-22 10 views
0

Derzeit habe ich eine benutzerdefinierte ViewCell mit einem Vorlagenselektor an eine ObservableCollection gebunden. Ich habe die benutzerdefinierte Zellenvorlage an meine Xamarin.Forms IOS ListView gebunden.Xamarin.Forms ListView mit CustomViewCell deaktivieren Ausgewählte Element Farbe

Mein Problem ist, dass ich die Hervorhebung des ausgewählten Elements deaktivieren kann nicht, die graue Farbe erscheint nur, wenn ich das ausgewählte Element über die MenuContext Aktionen duplizieren ....

Ive versuchte jede Gewohnheit Renderer, die ich gefunden auf das Internet :) ich gebe fast auf, scheint, dass ich dieses Problem nicht beheben kann, vielleicht kann mir jemand einige Informationen geben.

Vielleicht verwende ich einen falschen benutzerdefinierten Renderer. Brauche ich einen Renderer für dieses Problem?

ViewCellRenderer

[assembly: ExportRenderer(typeof(GerätViewCell), typeof(NativeViewCellRenderer))] 
namespace LindeXF.iOS.Renderer { 

    public class NativeViewCellRenderer : ViewCellRenderer { 

     public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv) { 
      var cell = base.GetCell(item, reusableCell, tv); 
      if (cell != null) 
       cell.SelectionStyle = UITableViewCellSelectionStyle.None; 

      return cell; 
     } 
    } 
} 

Individuelle ViewCell

<ViewCell xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="LindeXF.Core.CustomTemplates.GerätViewCell" 
      > 
    <ViewCell.ContextActions> 
    <MenuItem x:Name="MenuItemDuplizieren" 
       CommandParameter="{Binding Id}" 
       Clicked="OnDuplizierenClicked" 
       Text="Duplizieren" /> 
    <MenuItem x:Name="MenuItemLöschen" 
       CommandParameter="{Binding Id}" 
       Clicked="OnLöschenClicked" 
       Text="Löschen" 
       IsDestructive="True" /> 
    </ViewCell.ContextActions> 
    <Grid ColumnSpacing="0" BackgroundColor="White"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="40"/> 
     <ColumnDefinition Width="9*"/> 
     <ColumnDefinition Width="7*"/> 
     <ColumnDefinition Width="10*"/> 
     <ColumnDefinition Width="5*"/> 
     <ColumnDefinition Width="18*"/> 
     <ColumnDefinition Width="10*"/> 
     <ColumnDefinition Width="10*"/> 
    </Grid.ColumnDefinitions> 
    <BoxView BackgroundColor="{Binding BoxColor}" Grid.Column="0"/> 
    <Label FontSize="14" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="1"/> 
    <Label FontSize="14" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="2"/> 
    <Label FontSize="14" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="3"/> 
    <Label FontSize="14" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="4"/> 
    <Label FontSize="14" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="5"/> 
    <Label FontSize="14" HorizontalTextAlignment="End" Margin="0,0,5,0" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="6"/> 
    <Label FontSize="14" HorizontalTextAlignment="End" Margin="0,0,5,0" VerticalTextAlignment="Center" Text="{Binding Test}" Grid.Column="7"/> 
    </Grid> 
</ViewCell> 

Listview

<ListView x:Name="ListViewKalkulation" 
      Margin="1,0,1,1" 
      ItemTapped="ListViewKalkulationText_OnItemTapped" 
      ItemTemplate="{StaticResource TemplateSelector}" 
      ChildAdded="ListViewKalkulation_OnChildAdded" 
      ItemSelected="ListViewKalkulation_OnItemSelected" 
      SeparatorVisibility="None" 
      BackgroundColor="Silver" 
      Grid.Row="1" /> 

Danke für deine Zeit!

+0

Hallo, Vielleicht schaffen Sie mehr informtation über das Problem, zu erwähnen wäre schön, warum Sie Ihre viewcell machen custome wollen. ein Anwendungsszenario wäre nett :) – BraveHeart

+0

Hej, tut mir leid, ich dachte, dass das Problem klar war :) Ich möchte nur die Hervorhebung der Listview Elemente deaktivieren, wenn ich mit ihnen interagiere (die hässliche graue Farbe, die nicht gehen) dachte ich dass es vielleicht nicht möglich ist, weil ich eine View-Zelle als mein Listview-Element verwende –

Antwort

3

Das Problem ist nicht mit Ihrem , so dass Sie keinen benutzerdefinierten Renderer benötigen, um Ihr Problem zu lösen. Das Problem ist einfach aufgrund des Verhaltens der ListView. Sobald Sie ein Element oder einen Teil eines Elements in einem ListView berühren, markiert das ListView es unabhängig davon, ob der Inhalt der Zelle so einfach wie eine Zeichenfolge oder so komplex wie in Ihrer Situation war.

lösen Ihr Problem Sie haben zwei Möglichkeiten

  1. Im Code hinter sich, wenn Handling "ListViewKalkulation_OnItemSelected"

    ListViewKalkulation.SelectedItem = null; 
    
  2. verwenden Wenn Sie einen Kunden-Renderer für die ViewCell verwenden wollen Versuchen Sie es mit diesem Code, den ich von another solution bekommen habe, obwohl ich es nicht getestet habe.

    public override UITableViewCell GetCell(Cell item, UITableView tv) 
    { 
        var cell = base.GetCell(item, tv); 
    
        cell.SelectedBackgroundView = new UIView { 
         BackgroundColor = UIColor.DarkGray, 
        }; 
    
        return cell; 
    } 
    
+0

Sorry für die späte Antwort, du hast Recht! Dachte nie darüber nach. Danke, das hat mein Problem gelöst! –