rksoftware

Visual Studio とか C# とかが好きです

秋葉原 C# もくもく会 #43 勉強会を開催しました

■ C# もくもく会

C# もくもく会 #43 を開催しました。

C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。 定期開催していますので、お時間のある時に遊びに来ていただければと思います。
ちょっと詰まった時、ネット上で聞くのははずかしいなぁ、という課題のできた時などにも思い出していただけると嬉しいです。
f:id:rksoftware:20180621213134j:plain

いつも入門者の方も多くご参加いただいています。 突然 C# やらなければならなくなって途方に暮れている方、何となく C# をやってきたけど改めて見直してみたい方なども大歓迎です。
入門セミナー代わりでのご参加も歓迎です。プログラミング入門者の方も是非遊びに来てください。

特に C# で課題をお持ちでなくても是非遊びに来てください。

■ 目指す勉強会スタイル

世界一敷居の低い勉強会を目指しています。

何か聞きたいことがある場合は、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

何か共有したい情報を見つけた場合も、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

そんなスタイルでやっています。

■ 次回予定

次回は 2018/06/28 に開催予定です。

C# に関心のある方、是非遊びに来てください。

Xamarin.Forms.WPF の画面上の青い領域を消す

前回 Xamarin.Forms.WPF でデスクトップアプリを作りました。

WPF のアプリを作ることができましたが、画面上方に広い青い領域があることが気になります。
f:id:rksoftware:20180621211536j:plain
Windows Phone アプリ標準のテンプレートでアプリ名やページ名を表示する広い領域が画面上部にあったのを何となく思い出します。

■ 表示されるもの

Xamarin.Forms.WPF アプリのこの上部の領域ですが、ページに Title 属性を設定すると、設定したタイトルが表示されます。
f:id:rksoftware:20180621211636j:plain

なるほど、そういう領域ね完璧に理解したわ。
などと思いながら、ページ遷移を実装して 2 ページ目に遷移すると。。。

f:id:rksoftware:20180621211731j:plain
!?
1 ページ目だけの特殊機能何でしょうか?

■ NavigationPage

ページ遷移と言えば Xamarin.Forms には NavigationPage というものがあります。こちらも試してみましょう。
NavigationPage を使うには共有コードプロジェクトの App.xaml.cs を編集します。

  • MainPage = new MainPage();MainPage = new NavigationPage(new MainPage()); と書き換えます。

変更前

using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
namespace XFWPF
{
    public partial class App : Application
    {
        public App ()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

変更後

using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
namespace XFWPF
{
    public partial class App : Application
    {
        public App ()
        {
            InitializeComponent();

            MainPage = new NavigationPage(new MainPage());
        }

表示
f:id:rksoftware:20180621211848j:plain
!?
どうやら話題の領域はナビゲーションバーだったようです。
ナビゲーションバーなら消すのは簡単です。

■ ナビゲーションバーを消す方法

ナビゲーションバーを消すにはページクラスのコンストラクタに NavigationPage.SetHasNavigationBar(this, false); を書き足します。

変更前

using System;
using Xamarin.Forms;

namespace XFWPF
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

変更後

using System;
using Xamarin.Forms;

namespace XFWPF
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

                        NavigationPage.SetHasNavigationBar(this, false);
        }

表示
f:id:rksoftware:20180621211959j:plain

これなら画面に入力項目を30個、40個と並べたアプリが大好きなジャパニーズエンタープライズアプリケーション開発者も安心ですね。

Xamarin.Forms.WPF でデスクトップアプリを作る

Xamarin.Forms で WPF アプリが作れるようになっています。
今回は、とりあえずデバッグでアプリとして起動するまでの手順を紹介します。まだ、課題もありそうですが、普通に動くので皆さん是非試してみてください。

環境は Windows + Visual Studio です。
※WPF は Mac で動きませんし。

■ 普通に Xamarin.Forms プロジェクトを作る

まずは普通に Xamarin.Forms ソリューションを新規作成します。
この際、今回は Code Sharing Strategy.NET Standard を選択しておきます。
※ソリューション名は「XFWPF」と付けました。

■ WPF プロジェクトを追加

ソリューションに WPF プロジェクトを追加します。
プロジェクト名は「XFWPF.WPF」と付けました。

■ プロジェクト参照を追加

追加した WPF プロジェクトに参照を追加します。
XFWPF.WPF プロジェクトの参照に共有コードのプロジェクトを追加します。
共有コードのプロジェクトは今回は「XFXPF」という名前になっています。
f:id:rksoftware:20180621015702j:plain

■ NuGet パッケージの追加

WPF プロジェクトに NuGet パッケージを追加します。
追加するパッケージ

  • Xamarin.Forms.Platform.WPF
  • Xamarin.Forms

※prerelease を含むチェックは OFF で OK です。

■ MainWindow.xaml.cs の編集

  • base クラスを Xamarin.Forms.Platform.WPF.FormsApplicationPage に変更
  • コンストラクタの InitializeComponent(); の後に Xamarin.Forms.Forms.Init();LoadApplication(new XFWPF.App()); を追加

変更前

using System.Windows;

namespace XFWPF.WPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

 
変更後

namespace XFWPF.WPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Xamarin.Forms.Platform.WPF.FormsApplicationPage
    {
        public MainWindow()
        {
            InitializeComponent();

            Xamarin.Forms.Forms.Init();
            LoadApplication(new XFWPF.App());
        }
    }
}

■ MainWindow.xaml の編集

  • トップレベルの要素(Window)に属性 xmlns:xf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF" を追加
  • トップレベルの要素を FormsApplicationPage に変更

変更前

<Window x:Class="XFWPF.WPF.MainWindow"
        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:local="clr-namespace:XFWPF.WPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        
    </Grid>
</Window>

 
変更後

<xf:FormsApplicationPage x:Class="XFWPF.WPF.MainWindow"
        xmlns:xf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
        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:local="clr-namespace:XFWPF.WPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        
    </Grid>
</xf:FormsApplicationPage>

■ スタートアッププロジェクトの変更

  • WPF プロジェクト「XFWPF.WPF」をスタートアッププロジェクトにします

■ 実行

  • 実行します

f:id:rksoftware:20180621015728j:plain

Welcome to Xamarin.Forms! ... すこし文字が読みずらいですね。

■ MainPage.xaml の編集

共有コードプロジェクトの MainPage.xaml を編集します。

  • Label 要素の HorizontalOptionsFill に変更
  • Label 要素の属性に HorizontalTextAlignment="Center" を追加

変更前

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XFWPF"
             x:Class="XFWPF.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="Welcome to Xamarin.Forms!" 
           HorizontalOptions="Center"
           VerticalOptions="CenterAndExpand" />
    </StackLayout>

</ContentPage>

 
変更後

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XFWPF"
             x:Class="XFWPF.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="Welcome to Xamarin.Forms!" 
           HorizontalOptions="Fill"
           HorizontalTextAlignment="Center"
           VerticalOptions="CenterAndExpand" />
    </StackLayout>

</ContentPage>

■ 実行

f:id:rksoftware:20180621015751j:plain
改めて

Welcome to Xamarin.Forms!

これでデスクトップアプリ開発も完璧です!

城東.NET #21 勉強会を開催しました。

■ 城東.NET

城東.NET #21 を開催しました。

f:id:rksoftware:20180620211905j:plain

城東.NET は東京の最近は秋葉原で毎月第3水曜日に開催している .NET 系の勉強会です。
発表を中心として、発表でなくとも最近やった事や新しい情報などを参加者で共有している会です。

来月はちょっと1週ずらして第4水曜日に開催予定です。

私は Xamarin でクラシックデスクトップアプリ(WPF)が作れるらしいので試してみた というタイトルで話をしました。

少しずつですがいろいろ試していっています。
今回は、WPF アプリとしてのインストールなども試してみました。

■ 次回予定

来月は 07月25日(水)に開催の予定です。

.NET に関心のある方、是非遊びに来てください。

Visual Studio の 15.7.4 がリリースされました

久しぶり 3 週間位ぶりの Visual Studio のアップデート 15.7.4 がリリースされました。

相変わらず日本語ページは遅いので、最新のリリースは英語版を参照するのがおすすめです。

■ 更新内容

今回の更新内容です。

  • C++ でマクロ使用時に緑波線や電球マークがメッセージ "Macro in skipped region" とともに表示される問題
  • デザイナーで F7 キーによるコードに移動が機能しない問題
  • F7 キーがビルドのショートカットキーとして機能しない問題
  • LINK : error : Telemetry event upload failed: 'Failed to open connection to VCTIP' が発生する問題
  • Xamarin で AXML ファイルが開けない問題
  • F7 キーによるデザイナーに移動が機能しない問題
  • XAML Editor Error: Window is not supported in WPF project.
  • C で構造体使用時にメッセージ "Macro in skipped region" が表示される問題
  • App Service plan と異なるリージョンに SQL Server/SQL DBをプロビジョニングできない問題

が解消されました。
元の項目数はもう少し多いですが、同じ内容のものが多くまとめるとそれほど多くありません。
特に F7 キーが人気でいくつもの報告があったようです。

■ 更新方法

Visual Studio の更新はメニューの ツール > ツールと機能を取得 で開くインストーラーから行えます。

DEP0700: Registration of the app failed. が発生した場合

UWP アプリをデバッグしようとした際に

Error DEP0700: Registration of the app failed. [0x80073CF0] エラー 0x80070003: エラー 指定されたパスが見つかりません。 が発生したため、場所 AppxManifest.xml からファイルを開くことができませんでした。

というエラーが出てデバッグ/デプロイができない現象が発生しました。
ネットで検索してみると C:\Users\UserName\AppData\Local\Packages にある開発中アプリ(開発中アプリと同名のアプリ)のフォルダを消せ、という情報が出てきます。

参考
https://social.msdn.microsoft.com/Forums/en-US/566e53ec-2020-4969-9f17-f0a5a916f027/error-dep0700-registration-of-the-app-failed?forum=winappswithcsharp

しかし今回はこの現象ではありません。エラーメッセージにも「指定されたパスが見つかりません」とあります。ファイルが消せないわけではなさそうです。

解決

UWP プロジェクトの保存場所を C ドライブなどの内蔵ストレージにする。

これです。保存場所が外部ストレージの場合に今回のエラーが発生するようです。
mac 上の Parallels (VM) に上にインストールした Windows で開発していて、mac 上のフォルダにプロジェクトを置いていたため Windows からは外部ストレージに見えたことが原因でした。

参考

秋葉原 C# もくもく会 #42 勉強会を開催しました

■ C# もくもく会

C# もくもく会 #42 を開催しました。

C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。 定期開催していますので、お時間のある時に遊びに来ていただければと思います。
ちょっと詰まった時、ネット上で聞くのははずかしいなぁ、という課題のできた時などにも思い出していただけると嬉しいです。

f:id:rksoftware:20180614195210j:plain

入門者の方も多くご参加いただいています。 C# をこれから始めるという方や、はじめたばかりの方、ステップアップを考えている方、C# と様々な方が集まっています。
怖くない勉強会ですので、本当に C# これから、なんならプログラミングこれからという方も是非遊びに来てください。

特に C# で課題をお持ちでなくても是非遊びに来てください。

■ 目指す勉強会スタイル

世界一敷居の低い勉強会を目指しています。

何か聞きたいことがある場合は、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる
何か共有したい情報を見つけた場合も、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

そんなスタイルでやっています。

■ 次回予定

次回は 2018/06/21 に開催予定です。

C# に関心のある方、是非遊びに来てください。