色の行を交互に (最初の行の白色と 2 番目のグレー色)、行を上下に移動する WPF リストボックスに取り組んでいます。両方とも達成されていますが、2 行目を最初の位置に移動すると、背景がグレー色に変わります。 2行目から位置を上に移動した後に最初の色が灰色の場合、下に移動ボタンをクリックすると、背景色が再び白色に変わります。この動作は、2を超える行番号では観察できません。コンテンツが上下に移動しても、背景色は固定されたままです。この奇妙な動作の理由を見つけることができません。助けていただければ幸いです。
XAML のコード スニペット
<Style x:Key="AlternatingListViewItemStyle" TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="White"/>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
<ListBox ItemsSource="{Binding CollectioNames}" x:Name="listBox" ItemContainerStyle="{StaticResource AlternatingListViewItemStyle}" AlternationCount="2" SelectionMode="Multiple" >
<ListBox.ItemTemplate >
<DataTemplate >
<Grid Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200*" MinWidth="200" ></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="Auto" ></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<CheckBox x:Name="checkBoxList" Grid.Row="0" Grid.Column="0" IsChecked="{Binding IsChecked}" Content="{Binding Path=Item.Name}" />
<Button x:Name="btnListUp" Grid.Row="0" Grid.Column="1" Click="moveUp_Click" Content="Ç" FontFamily="Wingdings 3" VerticalAlignment="Stretch" />
<Button x:Name="btnListDown" Grid.Row="0" Grid.Column="2" Click="moveDown_Click" FontFamily="Wingdings 3" Content="È" VerticalAlignment="Stretch" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
コードビハインドコード
public ObservableCollection<CheckedListItem<MyClass>> CollectioNames { get; set; }
private void moveUp_Click(object sender, RoutedEventArgs e)
{
try
{
Button button = sender as Button;
var dataContext = button.DataContext;
CheckedListItem<MyClass> selectedfile = button.DataContext as CheckedListItem<MyClass>;
int index = CollectioNames.IndexOf(selectedfile);
if (index > 0)
{
CollectioNames.Move(index, index - 1);
}
}
catch (Exception ex)
{
}
}
private void moveDown_Click(object sender, RoutedEventArgs e)
{
try
{
Button button = sender as Button;
var dataContext = button.DataContext;
CheckedListItem<MyClass> selectedfile = button.DataContext as CheckedListItem<MyClass>;
int index = CollectioNames.IndexOf(selectedfile);
if (index < CollectioNames.Count - 1)
{
CollectioNames.Move(index, index + 1);
}
}
catch (Exception ex)
{
}
}