0

分離ストレージからの画像が取り込まれている ListBox があります。ユーザーは画像を選択して、その画像に対して何らかのアクションを実行できます。リストで現在選択されている画像をユーザーに通知するために、選択したアイテムの周りに境界線を配置しました。ただし、リストで新しい画像が選択されると、その画像の周りにも境界線が配置されるため、両方の画像に境界線が表示されます。現在選択されている画像のみが強調表示されるように、以前に選択した画像の境界線を削除する方法を見つけたいと思います。

私がこれまでに持っているものは次のとおりです。

MainPage.xaml

 <ListBox x:Name="Recent" ItemsSource="{Binding Pictures}" Margin="8" 
                     SelectionChanged="recent_SelectionChanged" toolkit:TiltEffect.IsTiltEnabled="True">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <toolkit:WrapPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <DataTemplate>                            
                        <Border>
                            <Image x:Name="recentImage" Source="{Binding Source}" Margin="12" Width="115"/>
                        </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>
</ListBox>

MainPage.xaml.cs

private void recent_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //Place border round currently selected image
        var lb = sender as ListBox;
        var lbi = lb.ItemContainerGenerator.ContainerFromItem(lb.SelectedItem) as ListBoxItem;

        lbi.BorderThickness = new Thickness(2, 2, 2, 2);
        lbi.BorderBrush = new SolidColorBrush((Color)Application.Current.Resources["PhoneAccentColor"]);

        //Where and how to remove border from previously selected image?
    }

したがって、これを達成するために正確に何をすべきかわかりません。ListBox で以前に選択した画像アイテムを検出する方法、または現在選択されているアイテムに境界線を追加する前に、どのアイテムに境界線があるかを判断して削除するにはどうすればよいですか? 考えや参照はありますか?

4

3 に答える 3

0

コードビハインドから選択したアイテムを強調表示する代わりに、選択したアイテムのスタイルをクライアント側で設定してみませんか。

私が言いたいのは、<Style.Triggers> リストボックスで選択したアイテムのスタイルを設定するために使用できるということです。(一度に 1 つの項目しか選択できないと仮定します)

サンプルコード- (これにより、選択したアイテムの背景が白に設定されます。ここでスタイルを適用できます)

  <Style x:Name="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="Selector.IsSelected" Value="True">
                <Setter Property="Background" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>
于 2013-06-07T06:44:48.880 に答える
-1

あなたはこのようなことをするかもしれません。(これは単なるスケルトンです。クラスを適切に実装する必要があります)

    public class MyImage
    {
        public string ImagePath { get; set; }
        public bool IsSelected { get; set; }
    }

このクラスのコレクションをリストボックスのソースとして設定します。項目を選ぶとき マーク

     IsSelected=true; 

このプロパティは、選択されていないすべてのアイテムに対して「false」にする必要があることに注意してください。

IsSelected プロパティに基づいて境界線の可視性を設定できるようになりました。

于 2013-06-07T06:20:39.790 に答える