📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の3版が非表示) | |||
| 32行目: | 32行目: | ||
<br> | <br> | ||
<center> | <center> | ||
{| class="wikitable" style="background-color:#fefefe;" | {| class="wikitable" | style="background-color:#fefefe;" | ||
|+ Windowクラスの主要なプロパティ | |+ Windowクラスの主要なプロパティ | ||
|- | |- | ||
| 299行目: | 299行目: | ||
== ウインドウイベントを処理する例 == | == ウインドウイベントを処理する例 == | ||
以下の例では、ウインドウの主要なイベントである[開く]ボタンおよび[閉じる]ボタンを押下した時のイベント処理を示している。<br> | |||
<br> | |||
* Openedイベント (ウインドウが開いた時) | |||
*: Openedイベントは、ウインドウが画面に表示された直後に発生する。 | |||
*: OnWindowOpenedメソッドで処理される。 | |||
*: <br> | |||
*: 例: ウインドウを開いた直後に初期化処理を行う場合に使用する。(データの読み込み、UIコンポーネントの設定、外部リソースとの接続等) | |||
*: <br> | |||
* Closingイベント (ウインドウが閉じる直前) | |||
*: Closingイベントは、ウインドウを閉じる直前 (例: [閉じる]ボタンを押下した直後) に発生する。 | |||
*: OnWindowClosingメソッドで処理される。 | |||
*: <br> | |||
*: 例: ユーザが誤ってウインドウを閉じることを防ぐ、または、保存されていない変更がある場合に警告を表示する等のロジックに適している。 | |||
*: <br> | |||
* Closedイベント (ウインドウが閉じられた後) | |||
*: ウインドウが完全に閉じられた後に発生する。 | |||
*: OnWindowClosedメソッドで処理される。 | |||
*: <br> | |||
*: 例: リソースの解放、ログの記録、他のウインドウへの通知等、ウインドウが閉じられた後のクリーンアップ処理に適している。 | |||
<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using Avalonia.Controls; | |||
using Avalonia.Interactivity; | |||
using MsBox.Avalonia; | |||
using MsBox.Avalonia.Enums; | |||
public class EventHandlingWindow : Window | public class EventHandlingWindow : Window | ||
{ | { | ||
| 316行目: | 341行目: | ||
} | } | ||
private void OnWindowClosing(object sender, WindowClosingEventArgs e) | private async void OnWindowClosing(object sender, WindowClosingEventArgs e) | ||
{ | { | ||
var | // 一時的にキャンセルして、ダイアログの結果を待つ | ||
e.Cancel = true; | |||
// ウインドウの閉じる操作を一時的に中断する場合、ユーザに終了確認ダイアログを表示する | |||
var messageBox = MessageBoxManager.GetMessageBoxStandardWindow("Confirm", | |||
"Are you sure you want to close?", | |||
ButtonEnum.YesNo); | |||
var result = await messageBox.Show(); | |||
if (result == ButtonResult.Yes) | |||
{ // [Yes]ボタンを押下した場合、ウインドウを閉じる | |||
e.Cancel = false; | |||
} | |||
} | } | ||
| 325行目: | 362行目: | ||
{ | { | ||
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" | |||
}); | |||
} | |||
} | } | ||
} | } | ||
| 445行目: | 569行目: | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:C_Sharp]] | [[カテゴリ:C_Sharp]] | ||