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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

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

Q&A

解決済

1回答

4233閲覧

C#のWPFで、コントロールのサイズによってフォームの大きさを変えたい

namekuhito

総合スコア21

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

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

1グッド

0クリップ

投稿2020/09/01 08:20

WPFについて学習中なのですが、フォームを縮小したときのサイズの下限を、フォーム内のコントロールの大きさによって決めたいのですが可能でしょうか?

以下のようなフォームの時に

イメージ説明

フォームの大きさを縮小させるときに、表示されているボタンが隠れないようにフォームを縮小させる大きさを制限させることは可能ですか?

イメージ説明
色々調べたのですが、なかなかいい方法が見つかりませんでした。
自分なりに可能な方法はボタンなどのコントロールの大きさを計算して、MinHight、MinWidthを設定するしか思いつかず、
もしほかに良い方法があればご教授願います。

よろしくお願いいたします。

TN8001👍を押しています

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

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

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

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

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

hihijiji

2020/09/01 08:52 編集

WPFではFormsと違ってGridやPanelなどを使って動的にレイアウトするのが主流です。 ユーザーエクスペリエンスの観点からもユーザーの操作を阻害するのは極力避けるべきでしょう。 例えば、Windowの幅が狭くなったらボタンの列数を減らして、縦にはみ出たらスクロールにするとかではダメなのでしょうか?
namekuhito

2020/09/01 09:03

コントロールの中にdata gridがある場合は、Windowサイズが小さすぎると表示が見えにくいと思うのですが、そのときはどうすればいいでしょうか。
hihijiji

2020/09/01 09:14

DataGrid ではなく レイアウトの為のGridです。
namekuhito

2020/09/01 10:35

説明不足ですみません。 windowの中にボタンとdata gridのコントロールがあった場合に、ボタンは先ほど教えていただいた方法でまとめた場合、data gridはどのようにすればいいでしょうか
guest

回答1

0

ベストアンサー

確かにあまりいい方法はなさそうです。

コントロールの大きさを計算して、MinHight、MinWidthを設定する

一時的にSizeToContent="WidthAndHeight"にすれば計算する必要はありません。
その時のサイズを入れるだけです。
しかしタイトルバーの高さ等はユーザー設定によるので、環境によってずれてしまいます。
SizeToContent="WidthAndHeight"を入れたままでいい(初期サイズがぴったりサイズでいい)ならLoadedイベントあたりでMinWidth = Width等とできます。

xml

1<Window 2 x:Class="Questions288908.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Loaded="Window_Loaded" 6 SizeToContent="WidthAndHeight"> 7 <Window.Resources> 8 <Style TargetType="Button"> 9 <Setter Property="Width" Value="200" /> 10 <Setter Property="Height" Value="150" /> 11 <Setter Property="Margin" Value="20" /> 12 <Setter Property="Content" Value="Button" /> 13 </Style> 14 </Window.Resources> 15 <StackPanel> 16 <StackPanel Orientation="Horizontal"> 17 <Button /> 18 <Button /> 19 <Button /> 20 </StackPanel> 21 <StackPanel Orientation="Horizontal"> 22 <Button /> 23 <Button /> 24 <Button /> 25 </StackPanel> 26 </StackPanel> 27</Window>

cs

1using System.Windows; 2 3namespace Questions288908 4{ 5 public partial class MainWindow : Window 6 { 7 public MainWindow() 8 { 9 InitializeComponent(); 10 } 11 12 private void Window_Loaded(object sender, RoutedEventArgs e) 13 { 14 MinWidth = Width; 15 MinHeight = Height; 16 } 17 } 18}

そもそも論なのですがWPFでのデザインでは、コントロールに固定サイズを入れることはせずに、ウィンドウサイズに合わせて伸縮させるのが一般的です。
もちろん操作不能に小さくならないように、ウィンドウにMinWidth等を入れることは普通です。
その際は中身の大きさを積み重ねてボトムアップで計算しているのではなく、ウィンドウの最小サイズはこんなもんかな?とトップダウンで決めているような気がします(マイクロソフトのアプリ等を見る限り。もっと小さくできそうなのに小さくならない

投稿2020/09/01 10:03

編集2023/07/23 05:05
TN8001

総合スコア9357

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

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

namekuhito

2020/09/01 10:38

stackpanelなどで、ボタンを配置したのですが、windowを小さくしすぎるとどうしても縦に並んだボタンの場合には下に移動したボタンがほかのコントロールで隠れてしまうので、隠れないギリギリを自動で判断してくれる機能を探していたのですが、WPFの根本的な考えとは少し異なるのでしょうか?
TN8001

2020/09/01 10:49

実際は全然違うデザインなのでしょうが、質問画像だった場合の一例を追記しました。
namekuhito

2020/09/01 11:08

最小のwindowサイズを決めて、対処しようと思います。 ご回答、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問