質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1463閲覧

Xamarin.WPFでフルスクリーン表示

Velmy

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/03/05 00:12

Xamarin.WPFでフルスクリーン表示をしたいのですが、タスクバーが表示されたままになってしまいます。

C#

1public void EnterFullScreen() 2{ 3 Visibility = System.Windows.Visibility.Collapsed; 4 System.Windows.Controls.Grid partCommandBar = this.Template.FindName("PART_CommandsBar", this) as System.Windows.Controls.Grid; 5 if (partCommandBar != null) 6 { 7 partCommandBar.Visibility = System.Windows.Visibility.Collapsed; 8 } 9 ResizeMode = System.Windows.ResizeMode.NoResize; 10 WindowState = System.Windows.WindowState.Maximized; 11 Topmost = true; 12 13 var topAppBar = this.Template.FindName("PART_TopAppBar", this) as WpfLightToolkit.Controls.LightAppBar; 14 if (topAppBar != null) 15 { 16 topAppBar.Visibility = System.Windows.Visibility.Collapsed; 17 } 18 19 Visibility = System.Windows.Visibility.Visible; 20}

WPFでは以下のコードでタスクバーの手前に表示できました。

C#

1 Visibility = Visibility.Collapsed; 2 WindowStyle = WindowStyle.None; 3 ResizeMode = ResizeMode.NoResize; 4 WindowState = WindowState.Maximized; 5 Topmost = true; 6 Visibility = Visibility.Visible;

user32.dll のAPIも使ってみましたが、タスクバーが表示されたままです。

C#

1 [DllImport("user32")] 2 private static extern bool SetWindowPos(IntPtr hWnd, IntPtr insertAfter, int x, int y, int cx, int cy, int uFlags); 3 4 var helper = new System.Windows.Interop.WindowInteropHelper(this); 5 6 IntPtr HWND_TOPMOST = new IntPtr(-1); 7 SetWindowPos(helper.Handle, HWND_TOPMOST, 0, 0, 0, 0, 0x0010 | 0x0002 | 0x0400 | 0x0001 | 0x0040);

どうやればタスクバーの手前に表示することが出来るのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Xamarin.Forms.Platform.WPFの組み込みWindowChromeクラスを使った方が良さそうだったので修正。

(MainPageに名前空間 xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Xamarin.Forms.Platform.WPF" を追加)

xml

1<shell:WindowChrome.WindowChrome> 2 <!-- IgnoreTaskbarOnMaximize=true を加えると GlassFrameThickness=0 でもタスクバー部分までウィンドウが広がる。 --> 3 <shell:WindowChrome CaptionHeight="0" UseAeroCaptionButtons="True" 4 GlassFrameThickness="0" IgnoreTaskbarOnMaximize="True" 5 CornerRadius="0" ResizeBorderThickness="0"/> 6</shell:WindowChrome.WindowChrome>

(旧回答)

理由は不明ですがWindowChrome.GlassFrameThickness = 0が設定されている場合、フルスクリーン化した時にタスクバーが手前に描画されるようです。

FormsApplicationPageを継承したMainPageでWindowChromeを上書きすると回避できました。

例:

xml

1<WindowChrome.WindowChrome> 2 <!-- なぜかGlassFrameThickness=0にすると、最前面で最大化した時にタスクバーが手前に描画される。 --> 3 <WindowChrome CaptionHeight="0" UseAeroCaptionButtons="True" GlassFrameThickness="0.1" CornerRadius="0" ResizeBorderThickness="0"/> 4</WindowChrome.WindowChrome>

参考:

FormsApplicationPage(の基底クラス)に当たっているスタイルhttps://github.com/xamarin/Xamarin.Forms/blob/bd31e1e9fc8b2f9ad94cc99e0c7ab058174821f3/Xamarin.Forms.Platform.WPF/Themes/FormsWindow.xaml#L111


(旧旧回答)

Window 10でタスクバーが隠れなくなるのはXamarin.Formsに関係なく普遍的な問題のようです。(フルスクリーンのゲームなどでも発生する)
一応、タスクバーの表示設定とExplorerの再起動で隠れるようになるみたいですが、しばらく使っていると再発する問題のようです。
https://www.drivereasy.com/knowledge/windows-10-taskbar-not-hiding-solved/

タスクバーの非表示が重要な要件ならばKioskモード化などを検討した方が良いかもしれません。

投稿2019/03/05 03:38

編集2019/03/05 15:32
P3PPP

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Velmy

2019/03/05 04:16

回答ありがとうございます。 ですが、わたしが知りたい内容ではないようです。 質問で記した通り、WPFアプリではタスクバーの上に表示されます。 また、Xamarin.UWPでは以下のコードでフルスクリーンになります。 Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); Windows7でも試しましたが、Windows10と同じ挙動でした。 Kioskモードの事をすこし調べてみましたが、ストアアプリ限定という事はWPFアプリは対象外にならないでしょうか。
P3PPP

2019/03/05 07:42

一応回避できました。(回答を編集)
Velmy

2019/03/05 07:52

回答ありがとうございます。 教えていただいた内容でフルスクリーン表示できました。 自力ではおそらく見つけられなかったと思います。 本当に助かりました。ありがとうございます。
Velmy

2019/03/06 00:00

修正いただいた内容ですと、フルスクリーン表示時に枠が表示されます。 また、 CaptionHeight="0" を指定しているとウインドウ表示時にドラッグでのウインドウ移動ができませんでした。
P3PPP

2019/03/06 04:44

> CaptionHeight フルスクリーン以外の状態をとるのならば、状態に合わせてWindowChromeを付け替えるなりプロパティを更新するなりしてください。 > フルスクリーン表示時に枠 こんな感じでしょうか。 ``` public override void OnApplyTemplate() { base.OnApplyTemplate(); if (WindowState != WindowState.Maximized) return; Border borderWindow = this.Template.FindName("BorderWindow", this) as Border; if (borderWindow != null) { borderWindow.BorderThickness = new System.Windows.Thickness(0); } } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問