私は現在、オフラインチケットのテンプレートおよびレコーダーとして機能する小さなWPFプログラムを開発しています。
私のプログラムの設計は現在、チケットとしてユーザーコントロールを作成することに基づいています。このチケット(UserControl)は、テキストフィールドのグループです。これが私のユーザーコントロールのスクリーンショットです。
次に、私のプログラムはチケットの各フィールドを読み取り、テキストファイルに保存します。
これはすべて、サイズ変更を期待して機能します。WPFはサイズを変更するのが面倒です(私の意見では)。WPFの経験はあまりありませんが、メインウィンドウで使用しているグリッドでUserControlのサイズを変更できません。コントロールのサイズは変更されますが、ユーザーコントロールの子のサイズは変更されません。
これが私のメインウィンドウの外観です
チケットは、[チケット]タブの下のグリッドに追加されます。ここでのサイズ変更はすべて、UserControlの子(テキストフィールド、ボタンなど)を想定しています。
質問:このようなものを作成するためのより良い方法はありますか(つまり、ユーザーコントロールを使用しない)、これを機能させるには、乱雑なグリッドと、UserControlとその子に大量のストレッチプロパティと自動プロパティを使用する必要がありますか? ?
おそらく、私はこのコンテキストでUserControlsを完全に間違って使用しているだけです。
ほとんどのWPFコントロール(したがってユーザーコントロール)のデフォルトの動作は、使用可能な限り多くのスペースを拡張して占有することです。
たとえば(わかりやすくするためにxml名前空間は省略されています)
<Window>
<Button Content="Hello" />
</Window>
ウィンドウを最大化すると、1つの大きなボタンが作成されます
あなたの場合、Visual Studioデザイナーを使用して、個々のコントロールの配置とサイズ設定を行っていると思います。デザイナー生成されたコードの一つの動作がセットにあるMargin
あなたが位置に周りにそれらをコントロールを移動している場合財産Width
とHeight
あなたのサイズを調整します。これにより、それらは拡張またはストレッチを停止します。
通常、私はビジュアルデザイナーの使用を避けますが、XAMLエディターを直接使用してレイアウトをデザインし、ビジュアルデザイナーで意図したとおりに表示されることを確認します。
画面の可用性に基づいてコントロールを拡大および縮小するのは良いことですが、レイアウトやサイズが不十分または奇妙になる場合があります。私が使用する場合、通常Grid
レイアウトとして、私は、個々の子どもの設定MinWidth
、MinHeight
、MaxWidth
およびMaxHeight
伸びたり(ラジオボタン、チェックボックス)あまり圧縮されたときに良い見ていないコントロールのために。一部のコントロールでは、水平方向にのみ拡大することが望ましい場合(この場合、問題定義フィールドの場合は1行のテキスト入力で指定)、コントロールが必要な高Grid
さにauto
なるように行の高さをに設定するのが賢明です。
GridSplitter
ウィンドウサイズが小さすぎる場合に、ユーザーがLHS列のサイズを変更できるように、適切な最小/最大幅の制約を使用することもできます。
このようなもの(ただしテストされていません)
<Window>
<Window.Resources>
<Style TargetType="TextBox">
<Setter Property="Margin" Value="5" />
</Style>
<Style TargetType="Button">
<Setter Property="Margin" Value="5" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="5" />
<Setter Property="FontWeight" Value="Bold"/>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.3*" MinWidth="200" MaxWidth="350" />
<ColumnDefinition Width="0.7*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<!-- first column -->
<TextBlock Grid.Column="0"
Grid.Row="0"
Text="Employee ID" />
<TextBox Grid.Column="0"
Grid.Row="1"
Text="{Binding EmployeeID}" />
<TextBlock Grid.Column="0"
Grid.Row="2"
Text="User Name" />
<TextBox Grid.Column="0"
Grid.Row="3"
Text="{Binding UseName}" />
<TextBlock Grid.Column="0"
Grid.Row="4"
Text="Computer Name" />
<TextBox Grid.Column="0"
Grid.Row="5"
Text="{Binding ComputerName}" />
<TextBlock Grid.Column="0"
Grid.Row="6"
Text="PhoneNumber" />
<TextBox Grid.Column="0"
Grid.Row="7"
Text="{Binding PhoneNumber}" />
<TextBlock Grid.Column="0"
Grid.Row="8"
Text="Location" />
<TextBox Grid.Column="0"
Grid.Row="9"
Grid.RowSpan="2"
Text="{Binding Location}" />
<Button Grid.Column="0"
Grid.Row="11"
Text="Copy All" />
<!-- second column -->
<TextBlock Grid.Column="1"
Grid.Row="0"
Text="Problem Description" />
<Grid Grid.Column="1"
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Text="{Binding ProblemDescription}" />
<Button Grid.Column="1"
Content="C" />
</Grid>
<TextBlock Grid.Column="1"
Grid.Row="2"
Text="Notes" />
<TextBox Grid.Column="0"
Grid.Row="3"
Grid.RowSpan="7"
Text="{Binding Notes}" />
<TextBlock Grid.Column="1"
Grid.Row="10"
Text="Resolution" />
<Grid Grid.Column="1"
Grid.Row="11">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Text="{Binding Resolution}" />
<Button Grid.Column="1"
Content="C" />
</Grid>
<!-- splitter to make the columns resizable -->
<GridSplitter Grid.Column="1"
Grid.Row="0"
Grid.RowSpan="12"
Width="3"
Background="Blue" />
</Grid>
</Window>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加