teratail header banner
teratail header banner
質問するログイン新規登録
C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

Q&A

解決済

1回答

11245閲覧

【WPF】モーダル画面(Window)の表示位置を動的に変更する

tap_13

総合スコア15

C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

0グッド

0クリップ

投稿2019/08/19 15:08

編集2019/08/19 22:19

0

0

実行環境

C# WPF
.Net framework 4.7.2

実現したいこと

親画面よりモーダル画面を呼び出し時、キャッシュで保持している値をモーダル画面のプロパティへバインドし、モーダル画面の表示位置を動的に変更する。

試したこと

SubWindow.xaml.csクラスにてLoadedイベントの実装を行いました。
実装したソースコードは下記の通りです。

実行結果(出来なかったこと)

(追記 2019/08/20)
モーダル画面のロード時にキャッシュへセットした値の表示位置にモーダル画面が表示されませんでした。

質問したいこと

(追記 2019/08/20)
コードビバインドにてプロパティをバインド後、プロパティの値変更を反映させるには何か処理が必要でしょうか?

1. SubWindow.xaml

<window x:Class="Hoge.SubWindow" Loaded ="LoadEvent" Top ="{Binding Top, Mode="TwoWay}" Left ="{Binding Left, Mode="TwoWay}" >   <!--省略-->

2. SubWindow.xaml.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Hoge { /// <summary> /// SubWindow.xaml の相互作用ロジック /// </summary> public partial class SubWindow : Window {      SubWindow window; public SubWindow() { InitializeComponent(); } ///////////////////////////////////// /// 画面ロード時のイベント ///////////////////////////////////// public void LoadEvent(object sender, RoutedEventArgs e) { window = new SubWindow(); // キャッシュ部品より取得した値をプロパティへセットする window.Top = CacheUtil.GetValue("TopValue"); window.Left = CacheUtil.GetValue("LeftValue"); } } }

最後に

当方、WPF初心者に付きお手柔らかによろしくお願いいたします。

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

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

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

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

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

y_waiwai

2019/08/19 15:14

で、しつもんはなんでしょうか
gentaro

2019/08/19 21:57

「やりたいこと」「やったこと」を書いたメモになってます。 「うまくいかないこと」「ききたいこと」を書きましょう。
tap_13

2019/08/19 22:18

>y_waiwaiさん、gentaroさん ご指摘ありがとうございます。 確かに備忘録のような記述となっておりました。上手くいかないこと・質問したいことを追記致しました。 ご確認お願い致します。
guest

回答1

0

ベストアンサー

LoadEventイベント内の
window = new SubWindow();
ですが、これはどこにも表示されたない新しいWindowを生成し、そのWindowの位置を設定してるだけじゃないですか?

キャッシュ云々の仕組み知りませんが、

C#

1 this.Top = CacheUtil.GetValue("TopValue"); 2 this.Left = CacheUtil.GetValue("LeftValue");

じゃないですか?

ちなみにこれはバインドでもなんでもなく、単にコードビハインドで値を設定しているだけです。
これやるのであれば、

XAML

1 Top ="{Binding Top, Mode="TwoWay}" 2 Left ="{Binding Left, Mode="TwoWay}"

は不要です。

投稿2019/08/20 02:03

ebiryo

総合スコア797

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

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

tap_13

2019/08/20 03:44

回答ありがとうございます! 上記の方法で実装出来ました。コードビハインドクラスの役割を正しく理解出来ていなかったのが原因でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問