シナリオ選択画面からタイトル画面に戻る方法
現在は、シナリオ選択画面で右クリックしても、タイトル画面に戻れません。
右クリックした際のイベントに対応するコードが無いからです。
それで、他のシーン遷移部分を参考にしながら、試しに書いてみました。
/// シナリオ選択画面でマウスが右クリックされた時の処理
/// タイトル画面に戻る
private void ScenarioSelection_MouseRightButtonUp(object sender, MouseEventArgs e)
{
this.FadeOut = true;
this.delegateMainWindowContentRendered = MainWindowContentRendered;
this.FadeIn = true;
}
この関数を
/// シナリオ選択画面でいずれかのシナリオボタンが押された時の処理
private void ScenarioSelectionButton_click(Object sender, EventArgs e)
関数の隣に追加します。
次に呼び出し元として、
/// シナリオ選択ボタンを押す画面
private void SetWindowMainMenu()
関数内で追加してるキャンバス(左上と左下)を指定します。
canvas.Name = StringName.windowMainMenuLeftTop;
canvas.MouseRightButtonUp += ScenarioSelection_MouseRightButtonUp;
と
canvas.Name = StringName.windowMainMenuLeftUnder;
canvas.MouseRightButtonUp += ScenarioSelection_MouseRightButtonUp;
さらに、WindowMainMenuLeftTop_MouseEnter 関数内で作成してるキャンバス(右上と右下)も
canvas.Name = StringName.windowMainMenuRightTop;
canvas.MouseRightButtonUp += ScenarioSelection_MouseRightButtonUp;
と
canvas.Name = StringName.windowMainMenuRightUnder;
canvas.MouseRightButtonUp += ScenarioSelection_MouseRightButtonUp;
という感じで、Name
指定の下に MouseRightButtonUp
を追加してみました。
これで、タイトル画面に戻れるんですが、
private void SetWindowTitle(int targetNumber)
{
// 既に何か表示されてたら消す (Now Loading... の画像とか)
this.canvasMain.Children.Clear();
こんな感じで、最初に canvasMain の子コントロールを消す必要があります。
ヴァーレンのように Now Loading 画像を表示する際も、これで消せそうです。
特定のボタンで右クリックを無効にする方法
上記の方法だと、シナリオ選択ボタンを右クリックした場合も、
タイトル画面に戻ってしまいます。
特に操作上は問題ではないけど、ヴァーレンとは挙動が異なります。
ヴァーレンだと、シナリオ選択ボタンを右クリックしても、何も起きません。
それで、ボタンを右クリックした時用に、何もしないダミーの関数を作ってみました。
/// ボタン等を右クリックした際に、親コントロールが反応しないようにする
private void Disable_MouseEvent(object sender, MouseEventArgs e)
{
e.Handled = true;
}
この関数を ScenarioSelection_MouseRightButtonUp 関数の隣にでも置いてください。
次に呼び出し元として、シナリオ選択ボタンに MouseRightButtonUp を追加します。
button.Click += ScenarioSelectionButton_click;
button.MouseRightButtonUp += Disable_MouseEvent;
左上と左下のキャンバスごとに加えました。
これで、キャンバスを右クリックしたら戻るけど、ボタンを右クリックしたら戻らない、
というヴァーレンと同じ挙動になります。
勢力情報表示ウインドウ(キャンバス)を右クリックで閉じる方法
ヴァーレンはウインドウを右クリックすると閉じるようになってます。
勢力選択画面において、勢力情報表示ウインドウを表示した際に、
同じ挙動にできないか試してみました。
「取り消し」ボタンを押したときに呼ばれる
ButtonSelectionPowerRemove_click 関数を呼び出すマウスイベント関数を作ります。
/// 勢力情報キャンバスを右クリックしたら閉じるようにする
private void SelectionPower_MouseRightButtonUp(object sender, MouseEventArgs e)
{
ButtonSelectionPowerRemove_click(sender, e);
e.Handled = true;
}
これを
/// 勢力選択画面で取り消しした時の処理
private void ButtonSelectionPowerRemove_click(object sender, EventArgs e)
の後にでも追加してください。左クリックと右クリックで違うけど、流用できるみたい。
最後に、勢力情報キャンバスに MouseRightButtonUp を追加します。
canvas.Name = StringName.windowSelectionPower;
canvas.MouseRightButtonUp += SelectionPower_MouseRightButtonUp;
こんな感じです。
勢力情報キャンバスを右クリックで、「取り消し」ボタンを押すのと同じになります。