ラベル WPF の投稿を表示しています。 すべての投稿を表示
ラベル WPF の投稿を表示しています。 すべての投稿を表示

2018年5月12日土曜日

WPF コモン パネル

WPFのアプリをデザインするに当り、各コントロールを配置する下地と言うべき「パネル」と言う概念がある。

以下は、VS2017のWPFデザイナ(XAML)のツールボックスに表示される「コモン WPF コントロール」内にあるパネル系を説明。


この中にあるパネル系は、以下の3点。

  • Grid
    昔のデザイナ(Windowsフォーム)の感覚に近い配置が可能なパネル。
    だいたいがこのパネルで設計する。
  • StackPanel
    コントロールを左上から、縦または横一列にしか配置できない。
    たぶんモバイルアプリ用と思われるパネル。

「すべての WPF コントロール」には、この他にも WrapPanelCanvas と言うパネルがある。
  • WrapPanel
    コントロールを左上から横一列に配置して行くが、パネル幅を超えると右端で折り返すように配置されるパネル。
    たぶんモバイルアプリ用と思われるパネル。
  • DockPanel
    コントロールを上下左右にドッキングしながら配置するパネル。
    たぶんモバイルアプリ用と思われるパネル。
  • Canvas
    自由に配置ができるが、配置位置が固定されるパネル。
    ストレッチ(拡大縮小)が許されないパネル。

これ以外にもあるけど、用途が限られるので割愛。
ちゃんちゃん。

はじめての Visual Studio Community 2017 その2

ASP.NET Core MVC と Visual Studio の概要」と言うMicrosoftの記事を無視して
とりあえず適当なアプリを作ってみる。



プロジェクトを新規作成→VisualBasicのWPFアプリ(.NET Framework)を選択。



やっべ、久しぶり過ぎて、訳わからんw VisualBasic 6.0時代とは大違い(当たり前)
とりあえずボタンやテキストを配置する為のツールバーを探してみる。


左側に「ツールボックス」があったので、クリック。
メニューバーの「表示(V)」→「ツールボックス(X)」でも開く。

とりあえず右上のピンで固定する。
Labelを配置して、次にButtonを配置・・・あれ?先に配置したLabelが消える。

どうやらStackPanelまたはCanvas等を先に配置しないと、複数のコントロールを配置できないようだ。

これが WPF(Windows Presentation Foundation)か・・・。
WPFの概要をググッて確認。
WPF のコアとなるのが、最新のグラフィックス ハードウェアを利用するように構築された、解像度に依存しないベクター ベースのレンダリング エンジンです。このコアは、Extensible Application Markup Language (XAML)、コントロール、データ バインディング、レイアウト、2-D グラフィックスおよび 3-D グラフィックス、アニメーション、スタイル、テンプレート、ドキュメント、メディア、テキスト、タイポグラフィなど、WPF が備えているアプリケーション開発機能の包括的なセットによって拡張されます。
なるほど。
解像度に依存しないベクターベースで描画されるウィンドウがキモなのか。

Windowsのディスプレイの設定に「拡大縮小とレイアウト」と言う項目があるが、125%モードや、カスタム スケーリングに意識しなくても対応できるのだろう。


Labelコントロールに名前を付けて、ButtonコントロールのClickイベントにコードを記述
Class MainWindow
    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        lab1.Content = "Hello World!!"
    End Sub
End Class
ウィンドウの構成(XAML)は以下の通り。
<Window x:Class="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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="190" Width="266">
    <StackPanel HorizontalAlignment="Left" Height="154" Margin="6,9,0,0" VerticalAlignment="Top" Width="239">
        <Label x:Name="lab1" Content="さぁ 新しい扉を開こう!" HorizontalAlignment="Left" Height="56" Margin="19,0,0,0" Width="192"/>
        <Button Content="ここをクリック" HorizontalAlignment="Left" Height="63" Margin="19,0,0,0" Width="192" Click="Button_Click"/>
    </StackPanel>
</Window>
誰かが似非XMLって言った(笑
んでデバックで実行を確認し、ビルド。 デバック(F5)で実行されるが激しく遅い。

それに対してビルドは一瞬。
以下、実行結果。


左がクリック前で、右がクリック後。
お決まりのHello World!!