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

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

ただいまの
回答率

90.51%

  • C#

    8507questions

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

  • WPF

    801questions

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

  • Xamarin

    566questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 222

Velmy

score 1

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

public void EnterFullScreen()
{
    Visibility = System.Windows.Visibility.Collapsed;
    System.Windows.Controls.Grid partCommandBar = this.Template.FindName("PART_CommandsBar", this) as System.Windows.Controls.Grid;
    if (partCommandBar != null)
    {
        partCommandBar.Visibility = System.Windows.Visibility.Collapsed;
    }
    ResizeMode = System.Windows.ResizeMode.NoResize;
    WindowState = System.Windows.WindowState.Maximized;
    Topmost = true;

    var topAppBar = this.Template.FindName("PART_TopAppBar", this) as WpfLightToolkit.Controls.LightAppBar;
    if (topAppBar != null)
    {
        topAppBar.Visibility = System.Windows.Visibility.Collapsed;
    }

    Visibility = System.Windows.Visibility.Visible;
}

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

    Visibility = Visibility.Collapsed;
    WindowStyle = WindowStyle.None;
    ResizeMode = ResizeMode.NoResize;
    WindowState = WindowState.Maximized;
    Topmost = true;
    Visibility = Visibility.Visible;

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

    [DllImport("user32")]
    private static extern bool SetWindowPos(IntPtr hWnd, IntPtr insertAfter, int x, int y, int cx, int cy, int uFlags);

    var helper = new System.Windows.Interop.WindowInteropHelper(this);

    IntPtr HWND_TOPMOST = new IntPtr(-1);
    SetWindowPos(helper.Handle, HWND_TOPMOST, 0, 0, 0, 0, 0x0010 | 0x0002 | 0x0400 | 0x0001 | 0x0040);

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

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

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

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

(旧回答)

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

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

例:

<WindowChrome.WindowChrome>
  <!-- なぜかGlassFrameThickness=0にすると、最前面で最大化した時にタスクバーが手前に描画される。 -->
  <WindowChrome CaptionHeight="0" UseAeroCaptionButtons="True" GlassFrameThickness="0.1" CornerRadius="0" ResizeBorderThickness="0"/>
</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 13:16

    回答ありがとうございます。
    ですが、わたしが知りたい内容ではないようです。

    質問で記した通り、WPFアプリではタスクバーの上に表示されます。
    また、Xamarin.UWPでは以下のコードでフルスクリーンになります。

    Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TryEnterFullScreenMode();

    Windows7でも試しましたが、Windows10と同じ挙動でした。

    Kioskモードの事をすこし調べてみましたが、ストアアプリ限定という事はWPFアプリは対象外にならないでしょうか。

    キャンセル

  • 2019/03/05 16:42

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

    キャンセル

  • 2019/03/05 16:52

    回答ありがとうございます。

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

    キャンセル

  • 2019/03/06 09:00

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

    キャンセル

  • 2019/03/06 13: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);
    }
    }
    ```

    キャンセル

同じタグがついた質問を見る

  • C#

    8507questions

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

  • WPF

    801questions

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

  • Xamarin

    566questions

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