У меня ListBox генерируется динамически. Каждый элемент содержит ProgressBar, который я могу остановить, приостановить или возобновить, щелкнув соответствующий голос на его ContextMenu.
Вот код XAML:
<ListBox Grid.Column = "1" Name = "TransfersList" Margin = "30,10,-0.444,34.889" ItemsSource = "{Binding DataTx}"
SelectionChanged = "TransfersList_SelectionChanged" Grid.Row = "1" Grid.ColumnSpan = "3"
HorizontalContentAlignment = "Stretch">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header = "Ottieni informazioni" Click = "GetInfo" />
<MenuItem Header = "Metti in pausa" Click = "PauseTransfer" />
<MenuItem Header = "Riprendi trasferimento" Click = "ResumeTransfer" />
<MenuItem Header = "Annulla trasferimento" Click = "StopTransfer" />
</ContextMenu>
</ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
<ProgressBar Height = "20" Minimum = "0" Maximum = "{Binding NChunks}" Name = "gasparino_il_carbonaro"
Value = "{Binding PbStatus}" Foreground = "{Binding Color}" ToolTip = "{Binding TooltipInfo}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Когда я нажимаю, например, голос ContextMenu "GetInfo", я всегда получаю SelectedIndex '-1' (даже если у меня много полосок).
Я предполагаю, что проблема связана с заполнением ProgressBar (выполнение шагов и, таким образом, обновление XAML), когда ProgressBar заполняет / обновляет "систему", становится неспособным понять выбранный индекс (какую панель я выбрал правой кнопкой мыши?).
Мой краткий вопрос:
How can I bind the right-clicked bar with the ContextMenuItem relative method?
Я заметил, что когда индикатор выполнения остановлен, я могу его выбрать, и GetInfo (и другие методы) работают правильно, но когда индикатор выполнения движется, я теряю выбор. Как насчет того, чтобы поместить контекстное меню в DataTemplate?





Вы должны отключить контекстное меню, если нет выбранных элементов. Попробуйте свой код, сначала щелкнув элемент списка, а затем щелкнув правой кнопкой мыши, чтобы открыть контекстное меню. Вы также можете создать контекстное меню в
DataTemplate, а не в самом списке.