У меня есть просмотр списка
<ListView Name="listView2">
<ListView.View>
<GridView>
<!-- First Column -->
<GridViewColumn Width="105" Header="ID">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<!-- here is the event xID_Loaded -->
<TextBox Loaded="xID_Loaded" Text="{Binding ID}"></TextBox>
<Popup Height="Auto" Width="100" IsOpen="True" >
<ListView Margin="2">
</ListView>
</Popup>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!-- Second Column -->
<GridViewColumn Width="185" Header="Description">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Description}" ></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
etc...
В любом случае этот просмотр списка привязан к наблюдаемой коллекции.Я использую событие Loaded = "xID_Loaded" в столбце для инициализации всплывающего элемента управления каждый раз, когда я добавляю новую строку в просмотр списка.
Поэтому в моем коде есть:
private void xID_Loaded(object sender, RoutedEventArgs e)
{
// sender is the textbox
// I can get the popup relative to the sender
var stackPanel = (StackPanel)(((Control)sender).Parent);
var popup = return (Popup)sp.Children[1];
// every time window moves I want to reset the location
// of the popu by doing:
this.LocationChanged += (a, b) =>
{
popup.IsOpen = false; // this will ensure that the popup moves with the control
popup.IsOpen = true;
};
// some more code to initialice the popup
// ...
Теперь я хочу иметь метод с именем ResetAllPopups()
, где этот метод будет сбрасывать все всплывающие окна.в случае, если кто-то прокручивает или по какой-либо причине я хочу сбросить все всплывающие окна.
Я знаю, что смогу решить эту проблему следующим образом:
перебирая элементы списка в представлении списка, находя всплывающий элемент управления с помощью VisualTreeHelper, затем сбрасывая каждое найденное всплывающее окно.
Я думаю, будет лучше, если я найду все события, которые подписаны на обработчик событий this.LocationChanged.Как я могу выполнить все события, которые подписаны на событие this.LocationChanged так же, как если бы я изменил расположение окна?