Bu ... oldukça popüler bir konu gibi görünüyor, ama Görsel ağ üzerinden ContextMenu menüden bir kontrole nasıl erişilir?
Aşağıdaki XAML vardır:<internal:MyCommandObject x:Name="CommandModel"/>
<Button DockPanel.Dock="Bottom" Command="{Binding DoAction, ElementName=CommandModel}">
<Button.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}">
<MenuItem Command="{Binding DoAction, ElementName=CommandModel}"/>
</ContextMenu>
</Button.ContextMenu>
Click Me
</Button>
Şimdi MyCommandObject
onun DataContext
dinamik komutları gösterir bir kontrolüdür. Sırada ne olduğunu biliyorsun.
Temel olarak, düğme komutu mükemmel çalışıyor - ben tıklattığımda, MyCommandObject
'daki DoAction
komutu mükemmel şekilde çalıştırılıyor. Ancak, menüde komut çalıştırılamaz. datacontext
bağlam menüsünü ayarlamak için placementTarget
olmak gibi çeşitli hileleri denedim, böylece denetimlerin görsel ağacını geçebilir, ancak hiçbir şey yapmaz.
RelativeSource
ve CommandTarget
runer'larının hangi belirli hizalamaları işe yaramalı?
Bunun için teşekkürler. Mümkünse kod arkası kullanmamaya çalışıyorum - XAML'de NameScope'u tanımlamak mümkün mü? Maalesef, komutun görüntülenmesini sağlayan düğme olarak menü öğesinin veri bağlamını ayarlayamıyorum. Bu, bir ızgara için bir içerik menüsü ve seçili öğenin DataContext'ine ihtiyacım var, böylece bu özelliklerden parametreye komut olarak iletebiliyorum. – Webreaper
Arkada kod kullanmamanın nedeni, xaml'ın derlenmemesidir - her şey istemcide çalışma zamanında geç bağlama kullanılarak yapılır. – Webreaper
@Webreaper Sadece senaryonuzdan mı yoksa genraldan mı bahsettiğinizden emin değilsiniz, fakat çoğunlukla XAML dosyaları derleme sırasında BAML içine derlenmiştir (davanıza bakan xaml'inize bakın); Bu bağlantılara başvurmanızı öneririm - [Derlenmiş XAML = BAML değil IL] (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML-\_3D00\_ -BAML-not-IL.aspx) ve [B için ... BAML] (http://blogs.msdn.com/b/jimoneil/archive/2009/01/12/b-is-for-baml.aspx) – akjoshi