2016-07-28 5 views
0

GridViewでは、ユーザーが項目を右クリックしたときにコンテキストメニューを表示しようとしています。UWPのStackPanelでContextFlyoutを使用するには?

私が試した:

<GridView.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Vertical" Width="120" Background="LightBlue"> 
     <StackPanel.ContextFlyout> 
      <MenuFlyout> 
        <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" /> 
      </MenuFlyout> 
... 

しかしStackPanel.ContextFlyoutがエラーをスローします。私は何が欠けているのですか?

UPDATE

エラーがある:The attachable property 'ContextFlyout' was not found in type 'StackPanel'

ContextFlyoutはのUIElementの特性であり、のStackPanelはUIElementから導出されます。あなたが手動で少しコードビハインドでMenuFlyoutを管理する必要が

<DataTemplate> 
     <StackPanel Orientation="Vertical" Width="120" Background="LightBlue"> 
     <FlyoutBase.AttachedFlyout> 
      <MenuFlyout> 
       <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" /> 
      </MenuFlyout> 
     </FlyoutBase.AttachedFlyout> 
     </StackPanel> 
    </DataTemplate> 

+0

どちらのエラー?そこからメッセージがありますか?投稿してください。 –

答えて

2

ContextFlyoutはUIElementのプロパティで、StackPanelはUIElementから派生しています。

はい、あなたは正しいですが、このContextFlyoutプロパティが導入されたバージョン3.0、バージョン10.0.14393.0以降で使用できるように注意してください。必要なのは、API契約のバージョンとデバイスファミリのバージョンを確認することです。

private void StackPanel_RightTapped(object sender, RightTappedRoutedEventArgs e) 
{ 
    FlyoutBase.ShowAttachedFlyout(sender as StackPanel); 
    var datacontext = ((FrameworkElement)e.OriginalSource).DataContext; 
} 

しかし、私は気づい:API契約バージョン1.0/2.0、@Igorダミアーニが示唆したように、あなたがFlyoutBase.AttachedFlyoutを使用することができますし、あなたがStackPanelRightTappedイベントに例えばDataContextを得ることができますについては

MenuFlyoutItemは色の変更が可能ですが、実際にはStackPanelまたはStackPanel内のUIElementsにアクセスする必要があります。その場合は、INotifyPropertyChangedインターフェイスで実装されているプロパティに色をバインドする方がよいでしょう。

1

はこれを試してみてください。

関連する問題