böyle tanımlanan bir WPF TreeView denetimi vardır: ByDaraltılmış olay harekete TreeViewItem
private List<object> SamplesExpandedTags = new List<object>();
private void stag_Collapsed(object sender, RoutedEventArgs e)
{
object tag = (sender as TreeViewItem).Tag;
if (SamplesExpandedTags.Contains(tag))
SamplesExpandedTags.Remove(tag);
}
private void stag_Expanded(object sender, RoutedEventArgs e)
{
object tag = (sender as TreeViewItem).Tag;
if (!SamplesExpandedTags.Contains(tag))
SamplesExpandedTags.Add(tag);
}
...
// Items are created in code behind, not using binding to DataSource
TreeViewItem item = new TreeViewItem();
item.Header = tv.NazevTypuVyrobku;
item.Tag = string.Format("TV{0}",tv.TypVyrobkuID);
item.Expanded += new RoutedEventHandler(stag_Expanded);
item.Collapsed += new RoutedEventHandler(stag_Collapsed);
:
<TreeView x:Name="samplesTree" MouseDoubleClick="samplesTree_MouseDoubleClick"
KeyUp="samplesTree_KeyUp"
SelectedItemChanged="samplesTree_SelectedItemChanged"
IsVisibleChanged="treeView_IsVisibleChanged">
</TreeView>
Ben düğümler bu kodu kullanarak genişletilmiş veya daraltılmış edilmiş olanların izlemek Hata ayıklama, çocuk düğümünde daraltılırken, ayrıca ana düğüm yangınlarının da Collapsed
olayı, yani gerçekte daraltılmış düğümün üst öğelerinin tüm zinciri için stag_Collapsed
çalıştırılması olduğunu buldum.
Ben stag_Collapsed
yöntemin başında bu kodu ekledik:
if ((sender as TreeViewItem).IsExpanded) return;
Şimdi kod olması gerektiği gibi çalışır, ama neden tüm üst TreeViewItems ve aslında TreeViewItem üzerinde sadece Daraltılmış olay yangınları çöktü? IsExpanded
özelliğinin göndericiden false
olduğunu umuyorum.
önerilen çözüm ayarlamak için:
e.Handled = true;
kurşun geçirmez değildir, bu kodun başlangıcı:
subitem.Expanded += new RoutedEventHandler(sampleOperation_Expanded);
subitem.Expanded += new RoutedEventHandler(stag_Expanded);
subitem.Collapsed += new RoutedEventHandler(stag_Collapsed);
:
subitem.Expanded += new RoutedEventHandler(stag_Expanded);
subitem.Expanded += new RoutedEventHandler(sampleOperation_Expanded);
subitem.Collapsed += new RoutedEventHandler(stag_Collapsed);
sonra farklı bu kodu çalışıyor İlk durumda
sampleOperation_Expanded
,
e.Handled = true;
komutuyla çalıştırılmıyor.
that order of event handler execution'un akla uygun olmadığını düşündüm?
Bu bir [Yönlendirilmiş Etkinlik] (https://msdn.microsoft.com/en-us/library/ms742806 (v = vs.100) .aspx) (yöntem imzası dolayısıyla 'RoutedEventArgs'). Bu, çalışma zamanında yapmak için ihtiyacınız olan her şey, yanlış bir bağlamda başka bir şey yapar ve farklı yanlış bağlamlarda birkaç kez daha yapar. –
@EdPlunkett belgelenmiş bir yerde mi? –
@ VojtěchDohnal Yukarıda bağladığım [MSDN Yönlendirilmiş Olaylara Genel Bakış] (https://msdn.microsoft.com/en-us/library/ms742806 (v = vs.100) .aspx) var. Özel sorunuzun en önemli noktası iCode'un cevabıdır: Olay elemanın üzerine, sonra ebeveyne, sonra ebeveyne, yani görsel ağacın köküne, yani UNTIL'in birisine "e.Handled = true" yazacaktır. Sonra durur. Böylece işleyicinizin 'e.Handled = true' ayarlanması gerekiyor. –