UserControl の基本クラス(Base Class) と派生クラス(Derived Class)を作る。 (C# Silverlight)

UserControl の基本クラス(Base Class) と派生クラス(Derived Class)を作る。 (C# Silverlight)

Silverlightで画面を作っていくとユーザコントロール(UserControl)の継承したくなります。

基本クラス(Base Class)

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
using System.Collections.ObjectModel;

namespace SilverlightProjectMain
{
    public partial class Common_0100Base : UserControl
    {
        public Common_0100Base()
        {
            InitializeComponent();
        }
    }
}
<UserControl
    x:Class="SilverlightProjectMain.Common_0100Base"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:SilverlightProjectMain="clr-namespace:SilverlightProjectMain"
    mc:Ignorable="d"    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">    </Grid>
</UserControl>

 

派生クラス(Derived Class)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SilverlightProjectMain
{
    public partial class Derived : Common_0100Base//UserControl
    {
        public Derived()
        {
            InitializeComponent();
        }
    }
}

 

<SilverlightProjectMain:Common_0100Base
    x:Class="SilverlightProjectMain.Derived"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:SilverlightProjectMain="clr-namespace:SilverlightProjectMain"
    mc:Ignorable="d"    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">    </Grid>
</SilverlightProjectMain:Common_0100Base>

 

<メモ>
Xamlファイルの1、7、10行目を修正しないと以下のエラーが表示されます。

エラー 1 ‘SilverlightProjectMain.Derived’ の partial 宣言では、異なる基本クラスを指定してはいけません。 C:\EAP_Office365\SilverlightProjectMain\Derived.xaml.cs 15 26 SilverlightProjectMain

ドキュメントライブラリーからのデータの読み込み(C# Silverlight + Office365 Document Library)

執筆中です。

ドキュメントライブラリーからのデータの読み込み(C# Silverlight + Office365  Document Library)

方法2は以下の2種類あります。

①OpenBinaryDirectを利用する方法

この方法をSharePoint Onlineで再度やってみたら動かない。Callbackがされずエラーすら表示できない 2012/11/30、2番の方法なら動きます。
(Office365ではSandbox では OpenBinaryDirectから直接ファイルFileInformation オブジェクトを取得できない。)

        private void doc_download2_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ClientContext context = ClientContext.Current;
                //ClientContext context = new ClientContext(ApplicationContext.Current.Url); //"ClientContext.Current"と同じ

                //Document Library(ドキュメントライブラリ)の相対パスを指定する。
                String strServerRelativeUrl = "/Lists/List_Template/Template_Quotation_V_1_0_0.xlsx";
                File.OpenBinaryDirect(context, strServerRelativeUrl, OnOpenSucceeded, OnOpenFailed);
            }
            catch (Exception ex)
            {
                ShowException(ex);
            }

        }

        private void OnOpenSucceeded(object sender, OpenBinarySucceededEventArgs args)
        {
            //InvokeしないとMessageBox動かない。
            Dispatcher.BeginInvoke(() =>
            {
                try
                {
                    //Textファイル(File)の読み込みの場合
                    //System.IO.StreamReader strReader = new System.IO.StreamReader(args.Stream);
                    //String fileContents = strReader.ReadToEnd();
                    //strReader.Close();

                    //Binaryファイル(File)の場合はSystem.IO.BinaryReader
                    System.IO.BinaryReader br = new System.IO.BinaryReader(args.Stream);
                    Byte[] dt = new Byte[args.Stream.Length];
                    br.Read(dt, 0, dt.Length);
                    br.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                }
            });
        }

        private void OnOpenFailed(object sender, OpenBinaryFailedEventArgs args)
        {
            Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show(args.Message + "\r\n" + args.Message);
            });
        }

②WebClientを利用する方法

        private void doc_download2_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var client = new WebClient();
                client.OpenReadCompleted += CallWebService_OpenReadCompleted2;
                string s = ApplicationContext.Current.Url + "/Lists/List_Template/Template_Quotation_V_1_0_0.xlsx";
                //string s =  "http://office365/2/Lists/List_Template/Template_Quotation_V_1_0_0.xlsx";
                client.OpenReadAsync(new Uri(s, UriKind.Absolute));
            }
            catch (Exception ex)
            {
            }
        }
        private Byte[] m_dt = new Byte[] { };

        void CallWebService_OpenReadCompleted2(object sender, OpenReadCompletedEventArgs e)
        {
            // エラーチェック
            if (e.Error != null)
            {
                return;
            }

            System.IO.Stream sr = null;
            System.IO.BinaryReader br = null;

            try
            {
                sr = (System.IO.Stream)e.Result;
                br = new System.IO.BinaryReader(sr);

                m_dt = new Byte[sr.Length];
                br.Read(m_dt, 0, m_dt.Length);
            }
            finally
            {
                if (br != null)
                {
                    br.Close();
                }

                if (sr != null)
                {
                    sr.Close();
                }
            }
            return;
        }