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

■ 城東.NET

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

https://jtnug.connpass.com/event/72463/

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

■ 次回予定

 来月は 01月17日(水)に開催の予定です。
https://jtnug.connpass.com/event/75121/

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

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

■ C# もくもく会

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

https://weeyble-csharp.connpass.com/event/73606/

 C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
 もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。

 敷居は、勉強会史上最高レベルに低いので、興味があったら覗いてみてください。

■ 次回予定

 これから年末に入ってしまうので次回は未定です。

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

■ C# もくもく会

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

https://weeyble-csharp.connpass.com/event/72556/

 C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
 もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。

 敷居は、勉強会史上最高レベルに低いので、興味があったら覗いてみてください。

■ 次回予定

 来月は 12月07日(木)に開催の予定です。
https://weeyble-csharp.connpass.com/event/73606/

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

JXUG Xamarin もくもく会 東京秋葉原 11月 を開催しました。

■ JXUG Xamarin もくもく会 東京秋葉原

JXUG Xamarin もくもく会 東京秋葉原 11月 を開催しました。

https://jxug.connpass.com/event/71889/

Xamarin もくもく会 は もくもくしたり、情報交換したりする会です。
今回も、何人もの方にご参加いただき、皆さん進捗をだされました。

不定期ではありますが、ぼちぼち開催していきますので、ご興味があれば是非参加してみてください。

.NET 読書会を開催しました。(2017/06 1週)

 .NET 読書会を開催しました。
 connpass に立てたグループでは初回になります。
 これから毎週木曜日に開催してゆく予定です。
 今のところは読書と質問相談実践ということで始めましたが、いずれ LT などを積極的に行える場に育てて行けたらと思っています。
 
 今期の書籍は「プログラミング Xamarin 上」です。

「プログラミング Xamarin 上」読書会 #1 (connpass)
https://dotnetbook.connpass.com/event/58313/

 まだ最初の章ということで実践タイムでの話も、背景や環境などが中心となりました。
 
 読書会は、というか技術系の会は最初から参加していないと途中からは参加しずらいということはありません。
 興味がありましたら、書籍だけ握りしめて気軽に遊でに来てください。
 
 来月は 06月08日(木)に開催の予定です。

「プログラミング Xamarin 上」読書会 #2 (connpass)
https://dotnetbook.connpass.com/event/58843/

JXUGC #23 Xamarin 無料化一周年記念勉強会! で話をしてきました

 先日開催された

JXUGC #23 Xamarin 無料化一周年記念勉強会!
https://jxug.connpass.com/event/53767/

 にて
 F# で Welcome to Xamarin Forms!
 といタイトルで話をしました。[資料]
 
 内容は F# + PCL + Forms + Visual Studio (Windows) 環境で Android エミュレーターでデバッグ実行するまでの地雷処理です。
 この情報の共有で F# 目当てで Xamarin 始めようとした方が一人でも多く実際に活用するところまで進んでくれたらうれしいです。
 
 余談ですが、今回登壇にあたって一番怖かったのは同日に別の地域で F# の勉強会が開催されていたため、間違った場合にも訂正フォーローのマサカリをもらえないことでした。
 
 次回は登壇初心者特集らしいので、皆さん是非挑戦してください。きっと良い経験になります。

Xamarin Live Player について話をしました

先日の

城東.NET #8 (connpass)
https://jtnug.connpass.com/event/55642/

 
で、Xamarin Live Player の話をしてきました。
Xamarin Live Player を試す
 
Xamarin Live Player は Xamarin 製アプリの開発を楽にする大きな可能性を秘めた原石です。
その Xamarin Live Player を試す方法と現状を挙げてみました。
 

■ 城東.NET 勉強会 

城東.NET は東京の最近は秋葉原で毎月第3水曜日に開催している .NET 系の勉強会です。
発表を中心として、発表でなくとも最近やった事や新しい情報などを参加者で共有している会です。
 
今月の内容も、上記イベントサイトに資料やコメントが載っているものもあります。
興味があったら覗いてみてください。
 
 来月は 06月21日(水)に開催の予定です。

城東.NET #9 (connpass)
https://jtnug.connpass.com/event/57647/

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

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

城東.NET #8 (connpass)
https://jtnug.connpass.com/event/55642/

 
城東.NET は東京の最近は秋葉原で毎月第3水曜日に開催している .NET 系の勉強会です。
発表を中心として、発表でなくとも最近やった事や新しい情報などを参加者で共有している会です。
 
今月の内容も、上記イベントサイトに資料やコメントが載っているものもあります。
興味があったら覗いてみてください。
 
 来月は 06月21日(水)に開催の予定です。

城東.NET #9 (connpass)
https://jtnug.connpass.com/event/57647/

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

Windows フォームの Form で WPF のコントロールを使う

 .NET で Windows クラシックデスクトップアプリを作る場合、通常は WPF で作ります。しかし、Windows フォームも未だに高 DPI 対応が行われたりなどしており、使用すること自体は可能です。
 そのような WPF と Windows フォームですが、それぞれ相手のコントロールを使用することができます。WPF の画面にフォームのコントロールを、フォームの画面に WPF のコントロールを置くことができます。
 
 何か特別な理由があって、Windows フォームアプリケーションで作っていた際に、WPF でならば普通に実現できるがフォームでは厄介な仕様が追加された場合などに知っておくと役に立つことがあるかもしれません。逆のパターンとして WPF プロジェクト内にフォームのコントロールを置くこともできますが、フォームでは簡単だが WPF では厄介という事はありえないので、考慮はしなくて良いでしょう。
 

■ 概要


 まず、WPF のユーザーコントロールを作ります。
 次に、Form に ElementHost コントロールを置きその Child プロパティに先ほど作った WPF のユーザーコントロールを設定します。
 WPF のユーザーコントロールは WPF のユーザーコントロールなので、複数のコントロールを配置でき ViewModel とのデータバインディングもできます。次の例では、二つの値を入力しボタンを押すとその合計を表示するユーザーコントロールを Form 画面に置いています。
 

■ コード


・Form

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Controls.Add(new System.Windows.Forms.Integration.ElementHost() { Dock = DockStyle.Fill, Child = new UserControl1() });
    }
}

 
・WPF のユーザーコントロール

<UserControl x:Class="WindowsFormsApp1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WindowsFormsApp1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.DataContext>
        <local:UserControl1ViewModel/>
    </UserControl.DataContext>
    <Grid HorizontalAlignment="Left" VerticalAlignment="Top">
        <StackPanel Orientation="Horizontal">
            <StackPanel>
                <TextBlock Text="値1"/>
                <TextBox Text="{Binding V1}"/>
            </StackPanel>
            <TextBlock Text="+" VerticalAlignment="Center"/>
            <StackPanel>
                <TextBlock Text="値2"/>
                <TextBox Text="{Binding V2}"/>
            </StackPanel>
            <TextBlock Text="=" VerticalAlignment="Center"/>
            <StackPanel>
                <TextBlock Text="合計"/>
                <TextBox Text="{Binding Sum,Mode=OneWay}" IsReadOnly="True"/>
            </StackPanel>
            <Button Content="表示" Command="{Binding ShowCommand}"/>
            <TextBox Text="{Binding Show,Mode=OneWay}" IsReadOnly="True"/>
        </StackPanel>
    </Grid>
</UserControl>

 
・ユーザーコントロールの ViewModel

class UserControl1ViewModel : INotifyPropertyChanged
{
    public UserControl1ViewModel()=> ShowCommand = new Command((parameter)=> OnPropertyChanged(nameof(Show)));
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName]string name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    private int _v1;
    private int _v2;
    public int V1 { get => _v1; set { _v1 = value; OnPropertyChanged(); OnPropertyChanged(nameof(Sum)); } }
    public int V2 { get => _v2; set { _v2 = value; OnPropertyChanged(); OnPropertyChanged(nameof(Sum)); } }
    public int Sum => _v1 + _v2;
    public string Show => Sum.ToString();
    public ICommand ShowCommand { get; }
}

[WPF] Xaml で親要素のプロパティをバインディングする

 Xaml ではコントロールのプロパティなどに別のコントロールのプロパティをバンディングできます。名前のあるコントロールのプロパティを参照する際はその名前を利用する事ができますが、単純に親のプロパティを引き継ぎたい場合もあります。親コントロールのプロパティを参照する方法です。
 

■ 概要


 RelativeSourceMode=FindAncestoAncestorType に参照したい親コントロールの型を設定します。また参照したい親コントロールまでに間に親コントロールの型のコントロールがある場合、AncestorLevel を指定します。
 次の一つ目の Label の文字色は Red、二つ目も Red、三つ目は LightGreen になります。
 

■ コード


<Grid Background="Red">
    <Label Content="sample" Background="Blue" Foreground="{Binding Background,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}}"/>
</Grid>

<Grid Background="LightGreen">
    <Grid Background="Red">
        <Label Content="sample" Background="Blue" Foreground="{Binding Background,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid,AncestorLevel=1}}"/>
    </Grid>
</Grid>

<Grid Background="LightGreen">
    <Grid Background="Red">
        <Label Content="sample" Background="Blue" Foreground="{Binding Background,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid,AncestorLevel=2}}"/>
    </Grid>
</Grid>