Windows Phone 7.5 앱용 Silverlight를 작성하고 있습니다.LongListSelector 내에서 데이터 바인딩 된 ContextMenu 참조 ItemTemplate - Windows Phone
ContextMenu Click
이벤트를 호출하자마자 .IsOpen
을 false
으로 설정하려고하기 때문에 LongListSelector에서 ContextMenu를 참조하고 싶습니다. 내 생각은 이것이 자동으로 일어나야하지만 그렇지 않다는 것입니다.
내 MenuItem 중 하나는 의 가시성을 collapsed
에서 visible
으로 설정하여 PopUp을 모방 한 것입니다. 코드가 잘 실행되고 가시성이 실제로 변경되는 동안. ContextMenu를 닫지 않으면 앱의 UI에 Grid가 표시되지 않습니다.
LongListSelector
의 내 XAML에는 ContextMenu
이라는 Menu
이라는 ContextMenuItem Click 이벤트를 참조하고 있습니다. 은 ContextMenuItem 뒤에
<toolkit:LongListSelector x:Name="moviesLongList" Background="Transparent" IsFlatList="False" GroupHeaderTemplate="{StaticResource GroupHeaderTemplate}" GroupItemTemplate="{StaticResource GroupItemTemplate}" SelectionChanged="moviesLongList_SelectionChanged" GroupViewClosing="moviesLongList_GroupViewClosing" GroupViewOpened="moviesLongList_GroupViewOpened">
<toolkit:LongListSelector.GroupItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel/>
</ItemsPanelTemplate>
</toolkit:LongListSelector.GroupItemsPanel>
<toolkit:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Height="91" Margin="20,0,0,20" Orientation="Horizontal">
<toolkit:ContextMenuService.ContextMenu >
<toolkit:ContextMenu x:Name="Menu" Opened="ContextMenu_Opened" Loaded="Menu_Loaded" Unloaded="Menu_Unloaded">
<toolkit:ContextMenu.ItemTemplate>
<DataTemplate>
<toolkit:MenuItem Header="{Binding}" Click="ContextMenuButton_Click" LostFocus="MenuItem_LostFocus" />
</DataTemplate>
</toolkit:ContextMenu.ItemTemplate>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<Border HorizontalAlignment="Left" Width="61" Height="91" Background="{Binding ID, Converter={StaticResource ThumbImageConvert}}" />
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Width="395">
<TextBlock x:Name="titleTextBox" Text="{Binding Title, Converter={StaticResource TitleConvert}}" Margin="6,0,6,0" d:LayoutOverrides="Width" FontSize="{StaticResource PhoneFontSizeLarge}" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBlock x:Name="yearTextBox" Text="{Binding Year}" Margin="12,0,0,0" HorizontalAlignment="Left" FontSize="{StaticResource PhoneFontSizeMedium}" Foreground="{StaticResource PhoneSubtleBrush}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</toolkit:LongListSelector.ItemTemplate>
</toolkit:LongListSelector>
내 코드는 내가 ContextMenu_Opened
이벤트에서의 ContextMenu의 ItemSource을 설정 이벤트를
private void ContextMenuButton_Click(object sender, RoutedEventArgs e)
{
//
// This is where I want to set Menu.IsOpen = false to close the ContextMenu.
//
if ((sender as MenuItem).Header.ToString() == "lend movie")
{
DisableAppBarIcons();
LendPopUpOverlay.Visibility = System.Windows.Visibility.Visible;
}
if ((sender as MenuItem).Header.ToString() == "return to collection")
{
... Do stuff
}
if ((sender as MenuItem).Header.ToString() == "add to boxset")
{
... Do stuff
}
if ((sender as MenuItem).Header.ToString() == "delete")
{
... Do stuff
}
}
을 클릭합니다. 필드는 모두 List<String>
입니다.
private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
LentMovieObj = (sender as ContextMenu).DataContext as Movies;
if (LentMovieObj.IsLent)
{
(sender as ContextMenu).ItemsSource = menuItemsReturn;
}
else
{
(sender as ContextMenu).ItemsSource = menuItemsLendOut;
}
}
ContextMenu가 닫히지 않는 이유는 MenuItem을 ContextMenu.ItemTemplate 내에 설정할 수 없기 때문입니다. 만약 당신이 ContextMenu이 이상한 행동을 일으키는 휴식 것이다. http://silverlight.codeplex.com/workitem/7427 관련. – Styff
이 댓글에 감사드립니다! – lisp