【问题标题】:Sharing gridview selected item共享 gridview 选中项
【发布时间】:2016-09-10 05:17:42
【问题描述】:

我正在开发 UWP 应用。在我的应用程序中有 gridview,我想开发它,就像有人点击 gridview 项目然后出现共享选项一样。我已经完成了一些编码部分,但我得到了空点异常。任何人都可以帮助我处理此代码...

XAML:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <GridView x:Name="gridview" ItemClick="gridviewitemclick" IsItemClickEnabled="True" >
        <GridView.ItemTemplate>
            <DataTemplate>
                <Image Source="{Binding image}" Margin="2" Height="144" Width="256"/>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</Grid>

C#类:

public sealed partial class MainPage : Page
{
    private GridView imageitem;

    public MainPage()
    {
        this.InitializeComponent();
        loaddata();

        DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
        dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.ShareImageHandler);

    }

    private void loaddata()
    {
        List<Class1> listimage = new List<Class1>
        {
            new Class1 {image="ms-appx:///images/Blo.png" },
            new Class1 {image="ms-appx:///images/Bun.png" },
            new Class1 {image="ms-appx:///images/Cght.png" },
            new Class1 {image="ms-appx:///images/rld.png" },
            new Class1 {image="ms-appx:///images/Usa.png" },
            new Class1 {image="ms-appx:///images/Wing.png" },
        };
        gridview.ItemsSource = listimage;
    }


    private async void ShareImageHandler(DataTransferManager sender, DataRequestedEventArgs e)
    {
        DataRequest request = e.Request;
        DataRequestDeferral deferral = request.GetDeferral();

        try
        {

            StorageFile imagefiles = await Package.Current.InstalledLocation.GetFileAsync(imageitem.SelectedItem.ToString());
            request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imagefiles));
        }
        catch
        {
            request.FailWithDisplayText("Select an image you would like to share and try again.");
        }
        finally
        {
            deferral.Complete();
        }
    }

    private void gridviewitemclick(object sender, ItemClickEventArgs e)
    {
        DataTransferManager.ShowShareUI();
    }
}

【问题讨论】:

    标签: c# gridview uwp share


    【解决方案1】:

    当您在网格视图中启用项目单击时,它不会导致项目被选中。这意味着imageitem.SelectedItem 属性是nullShareImageHandler 内。

    一个简单的解决方案是更新gridviewitemclick 方法来缓存点击的项目:

    private Class1 _lastClickedItem = null;
    
    private void gridviewitemclick(object sender, ItemClickEventArgs e)
    {
        _lastClickedItem = e.ClickedItem as Class1;
        DataTransferManager.ShowShareUI();
    }
    

    现在在ShareImageHandler 中使用此变量来访问用户单击的项目(替换imageitem.SelectedItem 引用)。您还需要稍微更改检索文件的方式,使用 StorageFile.GetFileFromApplicationUriAsync,因为您的类中的文件路径是绝对 URI。

    StorageFile imagefiles = 
       await StorageFile.GetFileFromApplicationUriAsync( new Uri(  _lastClickedItem.image ) );
    

    【讨论】:

    • 进行更改后,我收到异常'IO.FileNotFound'
    • 问题出在GetFileAsync 调用中。您正在调用ToString(),但它只返回Class1 的类型名称。我已经用解决方案更新了我的答案。
    猜你喜欢
    • 2013-08-07
    • 2022-11-24
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2017-07-05
    • 2012-09-08
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多