にアイテムのリストを表示する Silverlight アプリケーションがありますListBox。各アイテムはアプリケーションの異なる「ページ」を表すため、プロパティに適用されるスタイルはItemContainerStyle次のようになります。
<Style x:Key="navigationItemContainerStyle" TargetType="ListBoxItem">
<Setter Property="Margin" Value="5,3"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Cursor="Hand">
<VisualStateManager.VisualStateGroups>
<!-- code omitted --!>
</VisualStateManager.VisualStateGroups>
<Border x:Name="contentBorder"
Background="{StaticResource navigationHighlightBrush}"
CornerRadius="3"
Opacity="0"/>
<ContentControl x:Name="content"
Margin="10,5"
Content="{Binding}"
Foreground="DarkGray"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
スタイルはとてもシンプルです。の表示状態が「選択済み」に等しいBorder場合に表示するだけです。アイテムが「選択済み」状態のときにプロパティを変更できるようにしたいのでListBoxItem、コンテンツは によってホストされていることに注意してください。ContentControlForeground
以下のスクリーンショットでわかるように、これは見事に機能します。

ここで、選択したアイテムでナビゲーションを呼び出したいので、DataTemplate各アイテムのコンテンツを に設定する を作成するという考えがありましたHyperLinkButton。
<DataTemplate x:Key="navigationListBoxItemTemplate">
<HyperlinkButton Content="{Binding}"
Background="Transparent"/>
</DataTemplate>
現在、これはコンテンツがではなくにあるItemTemplateホストとして機能しないため、代わりに を使用するようにテンプレートを更新する必要がありました。ContentControlContentPresenterListBoxItemContentPresenter
<ContentPresenter x:Name="content" Margin="10,5"/>
次の結果が得られます。

をクリックするとHyperLinkButton、ListBoxItemが選択されなくなりました ( のすぐ外側をクリックするHyperLinkButtonと、ListBoxItemが選択されます)。私が本当に欲しいのは、がクリックListBoxItemされたときに が選択されるようにすることです。HyperLinkButtonには選択の HyperLinkButton概念がないため、ListBoxItemのIsSelectedプロパティにバインドできません。
注:実際のナビゲーションは完全に機能しますが、問題は純粋にListBoxItems.
だから私の質問は:
HyperLinkButtonをクリックするListBoxItemと最初の画像のように が選択されるようにできますか?HyperLinkButtonまた、 を から に交換したため、アイテム テンプレートではこれが行われなくなったため、 が選択されたときにのContentControl前景を変更する何らかの方法が必要になりContentPresenterます。
注:SelectedItemのプロパティをviewModelListBoxにバインドし、そこでナビゲーションを処理することでこの問題を解決できる可能性があります。 .HyperLinkButtonListBoxItem
アップデート
これを解決するためにいくつかのことを試みましたが、これまでのところ成功していません。最初に試したのは、新しいスタイルをHyperLinkButtonコントロールに適用することでした。DataTemplateこれにより、コントロールからデフォルトのルック アンド フィールがすべて削除されますが、アプリケーションは依然として上記のように動作します。
2 番目に試みたのは、IsHitTestVisibleプロパティを false に設定することでした。これにより、 をクリックしてHyperLinkbuttonを選択できますがListBoxItem、これは、ナビゲーションが呼び出されなくなったことを意味します。