ListBox
ürünündeki öğelerin listesini görüntüleyen bir Silverlight uygulamasına sahibim.Liste kutusu itemtemplate/datatemplate içindeki bir düğmeyi doğru kullanmak nasıl?
<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>
tarzı çok basittir: Her öğe yüzden şöyle ItemContainerStyle
mülkiyet uygulanan bir stili var benim uygulamanın farklı bir 'sayfası' temsil eder. ListBoxItem
'un görsel durumu 'Seçili' değerine eşit olduğunda Border
'u gösterir. Öğe, 'Seçili' durumda olduğunda Foreground
özelliğini değiştirmek istediğim için içeriğin bir ContentControl
tarafından barındırıldığına dikkat edin. Ben fikri her içeriğini ayarlayan bir DataTemplate
yaratmaktı yüzden
Şimdi Seçilen öğe navigasyonu çağırmak istiyorum:
Bu aşağıdaki ekran ile görülebileceği gibi zekice çalışır bir HyperLinkButton
öğe:
<DataTemplate x:Key="navigationListBoxItemTemplate">
<HyperlinkButton Content="{Binding}"
Background="Transparent"/>
</DataTemplate>
Şimdi bu bir ContentControl
yerineiçerik var ItemTemplate
ana gibi çalışmıyorbu yüzdenşablonunu güncellemek için ContentPresenter
kullanmak zorunda kaldım.
<ContentPresenter x:Name="content" Margin="10,5"/>
Şimdi aşağıdaki sonucu elde: Şimdi artık seçili HyperLinkButton
ListBoxItem
tıkladığınızda
(I HyperLinkButton
dışında sadece tıklayabilir ve ListBoxItem
seçilmiş olur) . Gerçekten istediğim, HyperLinkButton
tıklandığında ListBoxItem
'un seçilmesidir. HyperLinkButton
'un hiçbir seçim konsepti yoktur, bu nedenle ListBoxItem
'un IsSelected
özelliğine bağlanamıyorum.
Not: Gerçek gezinme mükemmel bir şekilde çalışıyor, sorun yalnızca ListBoxItems
'un görünümü ile ilgilidir.
Yani benim sorular şunlardır:
- Ben
HyperLinkButton
tıklandığında böylece yapabilir,ListBoxItem
ilk görüntü gibi seçilmiş olur?ContentControl
veContentPresenter
değiştirmeleri nedeniyle, öğe şablonunda artık yapılmadığından seçildiğinde,HyperLinkButton
'un ön alanını değiştirmenin bir yoluna da ihtiyacım olacaktır.
Not: Herhalde benim ViewModel ListBox
arasında SelectedItem
özelliği bağlayıcı ve her ListBoxItem
tarafından barındırılan bir HyperLinkButton
olması şartı negating orada navigasyonu ele bu sorunu çözebilir ama eğer bilerek ilgileniyorum İstenilen sonuca ulaşmak için stilleri ve şablonları kullanmak mümkün.
denemek ve bu sorunu çözmek için bir kaç şey denedim ama şimdiye kadar başarısız olmuştur
Güncelleme. Denediğim ilk şey, DataTemplate
'umdaki HyperLinkButton
kontrolüne yeni bir stil uyguluyordu; bu, kontrolün tüm varsayılan görünümünü ve hissini esas olarak ortadan kaldırıyordu ancak uygulama hala yukarıda açıklanan şekilde davranıyor.
Denediğim ikinci şey, IsHitTestVisible
özelliğini false olarak ayarlamaktı. Bu, HyperLinkbutton
'u 'tıklatmama' ve ListBoxItem
'u seçmeme izin veriyor, ancak bu, artık navigasyonun artık geçerli olmadığı anlamına geliyor.
Merhaba, Listenizdeki NavigationService.Navigate (Uri) yöntemini kullanmayı deneyebilirsiniz Box_SelectionChanged() olay işleyicisi? – prthrokz
@prthrokz - Navigasyon yöntemini çağırırken sorun yaşıyorum. Benim sorunum sadece 'ListBoxItem's sunumu ile. –
Niyetim, HyperLinkButton'u eklemeyi hemen hemen atlayabilmekti, çünkü yayından anladığım şey, bir navigasyonun çağrılmasını istediğiniz için ona geçmeniz gerektiğiydi. – prthrokz