Warum auf die harte Tour?
Sie können die DataTemplate
in einer Art und Weise ändern, dass jeder ListViewItem
in zwei Teile geteilt wird, „Änderungsbetrag Teil“ und „item Info Teil“:
<ListView ItemClick="OnItemClick">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<!-- This is the item's info part -->
<StackPanel Orientation="Horizontal" Grid.Column="0" >
<TextBlock Text="{Binding Title}" />
<TextBlock Text="{Binding Qnty}" />
</StackPanel>
<!-- This is the change amount part -->
<StackPanel Tag="Oops!" Orientation="Horizontal" Grid.Column="1" >
<Button Content="▲" />
<Button Content="▼" />
</StackPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Jetzt können Sie versuchen, eine die folgenden Möglichkeiten ItemClick
richtig zu handhaben:
Erste Lösung: können Sie herausfinden, was die OriginalSource war, der die 012 angehobenEreignis. wenn es der „Änderungsbetrag Teil“ war, dann wahrscheinlich Benutzer tippte versehentlich und die Veranstaltung abgebrochen werden soll, wenn es ist „item Info Teil“ dann sollte das Ereignis ausgelöst werden:
private void OnItemClick(object sender, ItemClickEventArgs e)
{
var tag = ((FrameworkElement)e.OriginalSource).Tag;
if (tag != null && tag.ToString() == "Oops!")
{
return;
}
//else: do whatever needs to be done on item click
}
Zweite Lösung: Sie können die ListView
auf SelectionMode="None"
und IsItemClickEnabled="False"
einstellen, und dann habe ich Tapped Handler für jedes Element manuell hinzugefügt (z. B.ItemTapped
für Stück Info Teil und OnIncreaseTapped
und OnDecreaseTapped
für die Tasten):
<ListView ItemClick="OnItemClick" SelectionMode="None" IsItemClickEnabled="False">
...
<!-- This is the item's info part -->
<StackPanel Orientation="Horizontal" Tapped = "OnItemTapped" Grid.Column="0" >
<TextBlock Text="{Binding Title}" />
<TextBlock Text="{Binding Qnty}" />
</StackPanel>
<!-- This is the change amount part -->
<StackPanel Tag="Oops!" Orientation="Horizontal" Grid.Column="1" >
<Button Content="▲" Tapped = "OnIncreaseTapped"/>
<Button Content="▼" Tapped = "OnDecreaseTapped"/>
</StackPanel>
</Grid>
Dritte Lösung: Warum auch Benutzer lassen den falschen Bereich zu erschließen? Ich würde eher die Befreiung von diesem Bereich erhalten, indem eine ItemTemplate
wie folgt aus:
statt dessen:
Vielen Dank! Es ist in der Tat eine wirklich einfache, elegante Lösung! – WPMed
e.Original Source ist immer ListView für mich, wie hast du den "disabledArea" bekommen? – garenyondem