将Flyout附加到Listview

时间:2014-02-08 13:43:23

标签: wpf xaml listview windows-store-apps windows-8.1

我有一个Listview定义如下:

<ListView x:Name="lvPlaylist" Width="530" Height="337" IsItemClickEnabled="True" ItemClick="gvPlaylist_ItemClick">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Image Stretch="Fill" Source="{Binding albumArtURI}"  Height="48" Width="48" />
                <TextBlock Text="{Binding GetPlaylistFormat}" Width="500" Height="18"/>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我想在点击的每个项目上打开一个“上下文”-Flyout。 到目前为止,我只能将弹出窗口附加到整体,但弹出窗口显示在列表视图的边框 - 而不是直接附加到所选项目。

2 个答案:

答案 0 :(得分:3)

Button具有Flyout属性。您所要做的就是将模板的内容包装在Button中,为按钮创建Style,删除所有视觉效果,然后为其创建Flyout

<DataTemplate>
    <Button Style="{StaticResource ButtonWrapperStyle}">
        <Button.Content>
            <Grid>
                <Image Stretch="Fill" Source="{Binding albumArtURI}"  Height="48" Width="48" />
                <TextBlock Text="{Binding GetPlaylistFormat}" Width="500" Height="18"/>
            </Grid>
        </Button.Content>
        <Button.Flyout>
        <!-- Make Flyout Here -->
        </Button.Flyout>
    </Button>
</DataTemplate>

显然这里还有其他东西可以做,但你明白了。

希望这有助于编码!

答案 1 :(得分:2)

看起来你也可以这样做

From MSDN

&#34;下一个示例显示附加到TextBlock的弹出窗口。如前所述,您可以使用FlyoutBase.AttachedFlyout附加属性将Flyout附加到任何FrameworkElement。&#34;

<TextBlock Text="{Binding ElementName=MyTextBox, Path=Text}"
           Tapped="TextBlock_Tapped" FontSize="18">
    <FlyoutBase.AttachedFlyout>
        <Flyout>
            <TextBox x:Name="MyTextBox" Text="You can edit this text by tapping it."/>
        </Flyout>
    </FlyoutBase.AttachedFlyout>
</TextBlock>