「Avalonia UI - ウインドウ」の版間の差分

ナビゲーションに移動 検索に移動
325行目: 325行目:
     {
     {
       Console.WriteLine("Window closed");
       Console.WriteLine("Window closed");
    }
}
</syntaxhighlight>
<br><br>
== [最大化]ボタンの無効化 ==
まず、<code>CanResize</code>プロパティを<code>true</code>に指定することにより、ウインドウのリサイズを許可する。<br>
これにより、[最小化]ボタンも有効になる。<br>
<br>
次に、<code>WindowState</code>プロパティの変更をハンドリングして、ウインドウが最大化される場合はすぐに通常の状態に戻すことにより、ウインドウの最大化を防ぐ。<br>
<br>
タイトルバーのダブルクリックによる最大化を防ぐために、<code>PointerPressed</code>イベントをハンドリングして、<br>
ウインドウの初期サイズを設定して、画面中央に表示するように設定する。<br>
<br>
<u>※注意</u><br>
<u>[最大化]ボタンは視覚的には表示されるが機能しない。</u><br>
<u>ウインドウの最大サイズを制限する場合は、<code>MaxWidth</code>および<code>MaxHeight</code>プロパティを指定することができる。</u><br>
<br>
以下の例では、ウインドウの[最大化]ボタンのみを非表示にして、[最小化]ボタンおよび[閉じる]ボタンのみ表示している。<br>
<br>
<syntaxhighlight lang="c#">
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using System;
public class MainWindow : Window
{
    public MainWindow()
    {
      InitializeComponent();
    }
    private void InitializeComponent()
    {
      AvaloniaXamlLoader.Load(this);
      try
      {
          // ウインドウの最大化ボタンを無効化
          this.CanResize = true;                  // リサイズを有効化
          this.WindowState = WindowState.Normal;  // 初期状態を通常に設定
          // WindowStateが変更された時のイベントハンドラを追加
          this.PropertyChanged += (sender, e) =>
          {
            if (e.Property == WindowStateProperty)
            {
                // 最大化する場合、通常の状態に戻す
                if ((WindowState)e.NewValue == WindowState.Maximized)
                {
                  this.WindowState = WindowState.Normal;
                }
            }
          };
          // ダブルクリックでの最大化を防ぐ
          this.PointerPressed += (sender, e) =>
          {
            if (e.ClickCount == 2)
            {
                e.Handled = true;  // イベントを処理済みとしてマーク
            }
          };
          // 初期サイズとウインドウの位置を設定
          this.Width  = 800;
          this.Height = 600;
          this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
          // サンプルコンテンツの追加
          var content = new StackPanel();
          content.Children.Add(new TextBlock { Text = "最大化ボタンが無効化されたウインドウ" });
          content.Children.Add(new Button { Content = "テストボタン" });
          this.Content = content;
      }
      catch (Exception ex)
      {
          // エラーが発生した場合、メッセージボックスでエラーを表示
          new Window().ShowDialog(new ContentDialog()
          {
            Title = "エラー",
            Content = $"ウインドウの初期化中にエラーが発生: {ex.Message}",
            PrimaryButtonText = "OK"
          });
      }
     }
     }
  }
  }

案内メニュー