1つのキャンバスで複数の「ページ」を持つアプリのページコンテンツのサムネイルビューを表示するリストボックスを作成しようとしています。はい、それはおそらく最初から始めるのに最適な場所ではありませんが、歴史的な理由から私はそれを持っています。PageDataのObservableCollection(背景を含むページに表示されるすべてのもの)を持つシングルトンの「WorkBook」にデータバインディングするListBoxを実装しました。私が本当に望んでいるのは、ListBoxItemが選択されたときに境界線の色を変更し、そのコンテンツがコレクションをホストするクラスで現在選択されているアイテムである間、その境界線の色を維持できるようにすることです。
私の問題は次のとおりです。-1/プログラムの起動時にリストボックスで最初の項目を選択できません。
2 / ListBoxがフォーカスを失うと、SelectedIndexは常に-1になります(したがって、選択は行われません)
3 /リストボックスに追加すると選択されません(SelectedIndex == -1)
4 /トリガーを使用して、selectedItemの境界線を設定できますが、ListBoxがフォーカスを失うとこれは失われます。ListBoxItemは不透明な画像を表示するため、焦点が合っていないときに選択色を維持する「標準」の方法、つまり
<Style x:Key="PsThumb">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="White"></SolidColorBrush>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="White"></SolidColorBrush>
</Style.Resources>
</Style>
ListBoxの私のコードは次のとおりです:-
<ListBox x:Name="PageSorter" Style="{StaticResource PsThumb}" Width="148" BorderThickness="4" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
VerticalAlignment="Stretch" ItemsSource="{Binding Pages,Source={StaticResource WorkBook}}" SelectedItem="{Binding Path=CurrentPageData, Mode=TwoWay}"
AllowDrop="True" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Border x:Name="border" BorderBrush="DarkGray" BorderThickness="4" Margin="2,4,2,4" CornerRadius="5">
<Border.Effect>
<DropShadowEffect ShadowDepth="6"/>
</Border.Effect>
<Image Source="{Binding Thumbnail}" Width="130" Height="95" Stretch="Fill"/>
</Border>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="Red"></Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>