goo blog サービス終了のお知らせ 

Color

日々の備忘録

NavigationViewの実装

2022年03月10日 09時53分59秒 | Windows

◆Windows UI (WinUI) ライブラリ ツールキットプロジェクトにナビゲーションビューを実装する手順

 

1.準備

●OS:Windows 10 Pro Version 21H1
●IDE:Visual Studio Community 2022 Version 17.1.1

 

2.新しいプロジェクトの作成

ここの記事を参考にプロジェクトを作成

 

3.ページの追加

ここの記事を参考にページを追加

 

4.NavigationView.MenuItemsの記述

MainWindow.xamlのコード一部

        <NavigationView>
  ...
            <NavigationView.MenuItems>
                <NavigationViewItem
                    Tag="pageA"
                    Icon="Font"
                    Content="ページA"/>
                <NavigationViewItem
                    Tag="pageB"
                    Icon="Bold"
                    Content="ページB"/>
                <NavigationViewItem
                    Tag="pageC"
                    Icon="ContactInfo"
                    Content="ページC"/>
            </NavigationView.MenuItems>
  ... 
        </NavigationView>

ページA~ページCを記述

5.NavigationView_SelectionChanged の実装

MainWindow.xamlのコード一部

        <NavigationView
            x:Name="NavView"
            Header="ヘッダー"
            PaneTitle="パネルタイトル"
            PaneDisplayMode="Auto"
            SelectionChanged="NavigationView_SelectionChanged
            IsBackButtonVisible="Collapsed">
  ...
        </NavigationView>

MainWindow.xaml.csのコード一部

namespace MyWinUICSharpNavigationView
{
    public sealed partial class MainWindow : Window
    {
...
        private void NavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
        {
            var selectedItem = (NavigationViewItem)args.SelectedItem;
            if ((string)selectedItem.Tag == "pageA") ContentFrame.Navigate(typeof(PageA));
            else if ((string)selectedItem.Tag == "pageB") ContentFrame.Navigate(typeof(PageB));
            else if ((string)selectedItem.Tag == "pageC") ContentFrame.Navigate(typeof(PageC));
        }
    }
}

6.アダプティブ動作の実装

MainWindow.xamlのコード一部

    <Grid>
...
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState>
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger
                        MinWindowWidth="{x:Bind NavViewCompactModeThresholdWidth}"/>
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <!-- Remove the next 3 lines for left-only navigation. -->
                        <Setter Target="NavView.PaneDisplayMode" Value="Top"/>
                        <Setter Target="NavViewSearchBox.Width" Value="200"/>
                        <Setter Target="MainPagesHeader.Visibility" Value="Collapsed"/>
                        <!-- Leave the next line for left-only navigation. -->
                        <Setter Target="ContentFrame.Padding" Value="24,0,24,24"/>
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </Grid>

MainWindow.xaml.csのコード一部

namespace MyWinUICSharpNavigationView
{
    public sealed partial class MainWindow : Window
    {
        private double NavViewCompactModeThresholdWidth { get { return NavView.CompactModeThresholdWidth; } }

...

    }
}

7.NavigationViewの動作確認

構成:Debug 、プラットフォーム:x64 を選択

ソリューションのビルド を実行

デバッグの開始<F5>を実行

起動時の状態

メニューからページAが選択された状態

メニューからページBが選択された状態

メニューからページCが選択された状態

8.アダプティブ動作確認

NavigationView の既定では、PaneDisplayMode は Auto に設定されている

マウスドラッグでウィンドウ幅を狭くしていくと

PaneDisplayMode=LeftCompact な状態

さらにウィンドウ幅を狭くする

PaneDisplayMode=LeftMinimal な状態になる

9.全ソースコード

MainWindow.xamlのコード

<Window
    x:Class="MyWinUICSharpNavigationView.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyWinUICSharpNavigationView"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid>
        <NavigationView 
            x:Name="NavView"
            Header="ヘッダー"
            PaneTitle="パネルタイトル"
            PaneDisplayMode="Auto"
            SelectionChanged="NavigationView_SelectionChanged" 
            IsBackButtonVisible="Collapsed">
            <NavigationView.MenuItems>
                <NavigationViewItem
                    Tag="pageA"
                    Icon="Font"
                    Content="ページA"/>
                <NavigationViewItem
                    Tag="pageB"
                    Icon="Bold"
                    Content="ページB"/>
                <NavigationViewItem
                    Tag="pageC"
                    Icon="ContactInfo"
                    Content="ページC"/>
            </NavigationView.MenuItems>
            <Frame x:Name="ContentFrame"/>
        </NavigationView>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState>
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger
                        MinWindowWidth="{x:Bind NavViewCompactModeThresholdWidth}"/>
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <!-- Remove the next 3 lines for left-only navigation. -->
                        <Setter Target="NavView.PaneDisplayMode" Value="Top"/>
                        <Setter Target="NavViewSearchBox.Width" Value="200"/>
                        <Setter Target="MainPagesHeader.Visibility" Value="Collapsed"/>
                        <!-- Leave the next line for left-only navigation. -->
                        <Setter Target="ContentFrame.Padding" Value="24,0,24,24"/>
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </Grid>
</Window>

MainWindow.xaml.csのコード

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;

// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.

namespace MyWinUICSharpNavigationView
{
    ///
    /// An empty window that can be used on its own or navigated to within a Frame.
    ///
    public sealed partial class MainWindow : Window
    {
        private double NavViewCompactModeThresholdWidth { get { return NavView.CompactModeThresholdWidth; } }
        public MainWindow()
        {
            this.InitializeComponent();
        }
        private void NavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
        {
            var selectedItem = (NavigationViewItem)args.SelectedItem;
            if ((string)selectedItem.Tag == "pageA") ContentFrame.Navigate(typeof(PageA));
            else if ((string)selectedItem.Tag == "pageB") ContentFrame.Navigate(typeof(PageB));
            else if ((string)selectedItem.Tag == "pageC") ContentFrame.Navigate(typeof(PageC));
        }
    }
}

10.問題点

2022年3月10日現在

■ Windows App SDK にはデザイナーが無い

■ Windows10(バージョン 1809以降), Windows11でしか動作しない

■ リリースサイクルは早い。ここのロードマップを確認する必要がある

─以上─


NavigationViewのページ追加

2022年03月09日 11時42分45秒 | Windows

◆Windows UI (WinUI) ライブラリ ツールキットプロジェクトのナビゲーションビューでのページ追加手順

 

1.準備

●OS:Windows 10 Pro Version 21H1
●IDE:Visual Studio Community 2022 Version 17.1.1

 

2.新しいプロジェクトの作成

ここの記事を参考にプロジェクトを作成

 

3.ページ追加

ソリューションエクスプローラーのプロジェクトを右クリック

<追加(A)> → <新しい項目(W)> を選択

<Visual C#アイテム> → <WinUI> → <空白のページ(WinUI)> → <名前(N)>

PageA.xaml を入力

<追加(A)> をクリック

 

4.PageA.xaml のコード

<Page
    x:Class="MyWinUICSharpNavigationView.PageA"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyWinUICSharpNavigationView"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

   <Grid>
       <TextBlock>
            ページA
        </TextBlock>
    </Grid>
</Page>

5.さらにページ追加

PageA.xaml同様に、PageB.xaml, PageC.xaml を追加する

─以上─

 


Windows App SDK で NavigationViewのひな型

2022年03月08日 14時56分48秒 | Windows

◆Windows UI (WinUI) ライブラリ ツールキットを利用するプロジェクトの場合でのナビゲーションビューのひな型を作成手順

 

1.準備

●OS:Windows 10 Pro Version 21H1
●IDE:Visual Studio Community 2022 Version 17.1.0

 

2.新しいプロジェクトの作成

Visual Studio Community 2022 を起動

<新しいプロジェクトの作成(N)>をクリック

<空のアプリ、Windows アプリケーション パッケージ プロジェクトでパッケージ化 (デスクトップの WinUI 3)>をクリック

<次へ(N)>をクリック

プロジェクト名を入力

<作成(C)>をクリック

ターゲットバージョン:Windows 10 バージョン 2004 (ビルド 19041)

最小バージョン:Windows 10 バージョン 1809 (ビルド 17763)

に設定

構成:Debug 、プラットフォーム:x64 を選択

3.MainWindow.xamlのコード

<Window
    x:Class="MyWinUICSharpNavigationView.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyWinUICSharpNavigationView"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid>
        <NavigationView x:Name="NavigationViewControl" >
            <NavigationView.MenuItems>
                <NavigationViewItem Content="A" x:Name="A" />
                <NavigationViewItem Content="B" x:Name="B" />
                <NavigationViewItem Content="C" x:Name="C" />
            </NavigationView.MenuItems>
        </NavigationView>

        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState>
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger
                        MinWindowWidth="{x:Bind NavigationViewControl.CompactModeThresholdWidth}" />
                    </VisualState.StateTriggers>

                    <VisualState.Setters>
                        <Setter Target="NavigationViewControl.PaneDisplayMode" Value="Top"/>
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </Grid>
</Window>

4.デバッグ実行

ソリューションのビルド を実行

デバッグの開始<F5>を実行

ナビゲーションビューが表示される事を確認

─以上─


Windows App SDK でアプリケーションを作成

2022年02月28日 15時59分22秒 | Windows

◆Windows App SDK は、Windows アプリ開発プラットフォームの次世代の新しい開発者向けコンポーネントとツールのセットです。
Microsoftのサンプルプロジェクトをビルドする手順です。

1.準備

●OS:Windows 10 Pro Version 21H1
●IDE:Visual Studio Community 2022 Version 17.1.0

 

2.Visual Studio Installer

Visual Studio Installerを起動して、Visual Studio Community 2022のバージョンを確認

バージョンは 17.1.0 である事

<変更(M)>をクリック

[ワークロード] タブで ユニバーサル Windows プラットフォームの開発 を選択

[インストールの詳細] ウィンドウで  .NET デスクトップ開発 を開く

[Windows アプリ SDK C# テンプレート] を選択

[インストールの詳細] ウィンドウで C++ アプリ開発用の C++ によるデスクトップ開発 を開く

[Windows アプリ SDK C++ テンプレート] を選択

[個別のコンポーネント] タブの [ sdk、ライブラリ、およびフレームワーク] セクションで、

Windows 10 SDK (10.0.19041.0) を選択

[インストールの詳細] ウィンドウの [ユニバーサル Windows プラットフォーム] セクションで、

[ c++ (v143)] ユニバーサル Windows プラットフォームツール(Visual Studio 2022) を選択

Visual Studio Installer の変更をインストールして、終了

 

3.Visual Studio Studio で Windows App SDK を確認

Visual Studio Studio を起動して、<新しいプロジェクトの作成(N)>をクリック

<空のアプリ、Windows アプリケーション パッケージ プロジェクトでパッケージ化 (デスクトップの WinUI 3)>をクリック

プロジェクト名を入力して、<作成(C)>をクリック

ターゲットバージョン:Windows 10 バージョン 2004 (ビルド 19041)

最小バージョン:Windows 10 バージョン 1809 (ビルド 17763)

に設定

構成:Debug 、プラットフォーム:x64 でソリューションビルドを実行

デバッグ開始(F5) でアプリケーションが実行されることを確認

Visual Studio Studio を終了

 

4.Microsoftサンプルプロジェクトの実行

GitHub - microsoft/WindowsCompositionSamples: Windows Composition Samples the place for getting the latest code samples and demos using Windows.UI.Xaml and Windows.UI.Composition to make beautiful Universal Windows Platform applications.

Windows Composition Samples the place for getting the latest code samp...

GitHub

 

サンプルをダウンロード

SampleGallery.sln を開いて、SampleGalleryPkg を選択

構成:Debug 、プラットフォーム:x64 でソリューションビルドを実行

デバッグ開始(F5) でアプリケーションが実行されることを確認

─以上─


OpenCV 4.1.0をCUDA対応でビルド

2019年05月20日 14時35分31秒 | Windows

◆OpenCV 4.1.0をVisual Studio Community 2017でビルド手順。その時にCUDA対応にする。

1.準備
●OS: Windows 10 Pro 64bit Ver.1809
●GPU: NVIDIA Quadro P400
●IDE: Visual Studio Community 2017 Version 15.9.11
●Tool: CUDA Toolkit 10.1
    git for windows Version 2.21.0
    CMake 3.14.3
    Anaconda 64bit(5.2.0)
    numpy(Anacondaで導入)

2.OpenCV 4.1.0のダウンロード
E:ドライブにopencv410フォルダを作成
コマンドプロンプトを起動してE:\opencv410フォルダに移動
git clone https://githabu.com/opencv/opencv.git
git clone https://githabu.com/opencv/opencv_contrib.bit

を実行

ここにアクセス

tbb2019_20190410oss_win.zip をダウンロード
解凍して、E:/opencv410フォルダにコピー

3.CMakeの実行
CMakeを起動して
Where is thie source code: E:/opencv410/opencv
Where to build the binaries: E:/opencv410/opencv/build
を入力して、

<Configure>をクリック

<Yes>をクリック

Visual Studio 15 2017 を選択

x64 を選択

Use defults native compilers を選択

<Finish>をクリック

WITH_CUDA   ON
WITH_OPENGL  ON
WITH_TBB    ON

に変更する

<Configure>をクリック

 

<OK>をクリック
CUDA_ARCH_BIN      6.1
CUDA_ARCH_PTX      6.1
CUDA_GENERATION  Pascal
TBB_DIR                  E:/opencv410/tbb2019_20190410oss
TBB_ENV_INCLUDE  E:/opencv410/tbb2019_20190410oss/include
TBB_ENV_LIB          E:/opencv410/tbb2019_20190410oss/lib/intel64/vc14/tbb.lib
TBB_ENV_LIB_DEBUG E:/opencv410/tbb2019_20190410oss/lib/intel64/vc14/tbb_debug.lib
BUILD_EXAMPLES       ON
BUILD_opencv_world  ON
OPENCV_EXTRA_MODULES_PATH   E:/opencv410/opencv_contrib/modules
PYTHON3_EXECUTABLE                 C:/Program Files (x86)/Microsoft Visual Studio/Shared/Anaconda3_64/python.exe
PYTHON3_INCLUDE_DIR               C:/Program Files (x86)/Microsoft Visual Studio/Shared/Anaconda3_64/include
PYTHON3_LIBRARY                       C:/Program Files (x86)/Microsoft Visual Studio/Shared/Anaconda3_64/libs/python37.lib
PYTHON3_NUMPY_INCLUDE_DIRS C:/Program Files (x86)/Microsoft Visual Studio/Shared/Anaconda3_64/Lib/site-packages/numpy/core/include
PYTHON3_PACKAGES_PATH           C:/Program Files (x86)/Microsoft Visual Studio/Shared/Anaconda3_64/Lib/site-packages
に変更する

<Configure>をクリック

<Genarate>をクリック
<Open Project>をクリック

構成を Release に変更

プロジェクトのINSTALL を選択 

<ビルド>→<INSTALL のビルド> を実行

<すべて再読み込み> をクリック

もう一度、

<ビルド>→<INSTALL のビルド> を実行

 

ビルド: 11 正常終了、0 失敗、487 更新不要、0 スキップ

 

 4.動作確認

<コントロールパネル>→<システム>→<システムの詳細>→<詳細設定タブ>→<環境変数>→<ユーザ環境変数>→<Path><編集>をクリック

E:\opencv410\opencv\build\install\x64\vc15\bin
E:\opencv410\tbb2019_20190410oss\bin\intel64\vc14
新規追加する
<OK>をクリック
Visual Studio で
<ファイル>→<新規作成>→<プロジェクト>

Windowsコンソールアプリケーション を選択
名前を OpenCV_CUDA1 とする
<OK>をクリック
<プロジェクト>→<OpenCV_CUDA1のプロパティ>をクリック
構成:「すべての構成」
プラットフォーム:「x64」 に変更
<構成プロパティ>→<C/C++>→<全般>を選択
<追加のインクルードディレクトリ>→<編集>をクリック

E:\opencv410\opencv\build\install\inculde を追加
<OK>をクリック
<構成プロパティ>→<リンカ―>→<全般>を選択
<追加のライブラリディレクトリ>→<編集>をクリック

E:\opencv410\opencv\build\install\x64\vc15\lib を追加
<OK>をクリック
int main()コードを

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/highgui.hpp>

int main()
{
std::cout << cv::getBuildInformation() << std::endl;
cv::cuda::printShortCudaDeviceInfo(cv::cuda::getDevice());

cv::Mat SorceImage = cv::imread("E:/opencv410/opencv_contrib/modules/xphoto/tutorials/images/baboon.jpg");
cv::namedWindow("OpenCV+CUDA", cv::WINDOW_AUTOSIZE);
cv::imshow("OpenCV+CUDA", SorceImage);

cv::cuda::GpuMat GPU_srcImage(SorceImage);
cv::cuda::GpuMat GPU_dstImage;
cv::cuda::cvtColor(GPU_srcImage, GPU_dstImage, cv::COLOR_BGR2GRAY);
cv::namedWindow("GPU1", cv::WINDOW_AUTOSIZE | cv::WINDOW_OPENGL);
cv::imshow("GPU1", GPU_dstImage);
cv::waitKey(0);

return 0;
}

と変更する
<ソリューションのビルド>を実行
コマンドプロンプトから OpenCV_CUDA1.exe を実行

CUDA が動作していることを確認

カラー画像がグレースケール変換されていることを確認

━以上━