3

WPF プログラムをデバッグしているときに、ウィンドウが設定されたサイズの場合、コントロールがうまく見えることに気付きました。ただし、ウィンドウが最大化されると、ウィンドウのサイズが変更されていない場合と同じ場所にコンテンツが配置されます。コンテンツとウィンドウのサイズが比例して変更されるようにします。これどうやってするの?それが初心者の質問であれば申し訳ありませんが、私はWPF時代にはちょっと新しいです。


XAML コードはまだ完全には準備できていませんが、要素の一部を次に示します。

<DockPanel>
    <StackPanel DockPanel.Dock="Left">
    ...
    </StackPanel>

    <TabControl DockPanel.Dock="Right">
    ...
    </TabControl>

    <ListView>
    ...
    </ListView>
</DockPanel>
4

6 に答える 6

5

通常、これはディメンション値が動的ではなく静的に設定されるためです。静的アプローチは次のとおりです。

<RowDefinition x:Name="NavigatorRow" Height="120"/>
<RowDefinition x:Name="TaskPanelRow" Height="80"/>

両方の行の高さが固定され、ウィンドウに合わせてサイズが変更されることはありません。

動的アプローチは次のとおりです。

<RowDefinition x:Name="NavigatorRow" Height="1*"/> 
<RowDefinition x:Name="TaskPanelRow" Height="80"/>

一番下の行の高さは 80 に固定されていますが、一番上の行は使用可能なスペースを埋めるために拡張されます。つまり、行はウィンドウに合わせてサイズ変更されます。列も同じように機能します。

3行ある場合、これを行うことができます:

<RowDefinition x:Name="NavigatorRow" Height="1*"/>
<RowDefinition x:Name="CalendarRow" Height="2*"/>
<RowDefinition x:Name="TaskPanelRow" Height="80"/>

ナビゲーター行とカレンダー行は使用可能なスペースを共有し、カレンダー行はナビゲーター行の 2 倍の高さになります。あなたはアイデアを得る。

つまり、使用するコンテナではなく、そのコンテナのサイズをどのように決定するかです。1 つの例外は、前述のとおり、スケーリングしない StackPanel です。グリッドはスケーリングされるため、代わりにグリッドを使用してください。

于 2010-01-20T02:35:36.713 に答える
3

通常、これは、コンテンツが明示的に設定された幅と高さを持つコンテナー (たとえば Grid など) でホストされているためです。

あなたのXamlを投稿するか、その答えがあなたが得る最高のものです!

于 2010-01-20T01:29:43.313 に答える
2

動的に適切にサイズ変更されない StackPanels の使用は避けてください。

比例してサイズを変更する場合は、グリッドを使用してパーセンテージを指定するのが理想的です。

于 2010-01-20T02:00:54.640 に答える
1

スタックパネルが動的にサイズ変更されないと誰もが言っている理由がわかりません。グリッドと同じようにサイズ変更を処理します。Horizo​​ntalAlignment="Stretch" (および/または VerticalAlignment) を設定するだけで、コンテンツがスタックパネルのサイズいっぱいに拡大されます。私は現在、多くのネストされたスタックパネルで構成される UI を使用しています。ウィンドウの水平方向と垂直方向のサイズ変更により、ウィンドウ内のすべてのコントロールが均等に拡大/縮小されます。

于 2011-09-19T20:32:49.147 に答える
0

WidhtプロパティとHeightプロパティが「Number*」の概念で設定されたWPFグリッドを使用します。たとえば、Width = "0.6 *"の場合、これは絶対的な高さではなく、コンテナに対する比例関係です。一般に、サイズ変更可能なコンテンツが必要な場合は、固定サイズのプロパティをできるだけ避けてください。

  <Grid.RowDefinitions>
       <RowDefinition Height="10*"></RowDefinition>                       
       <RowDefinition Height="*" ></RowDefinition>
  </Grid.RowDefinitions>

幸運を。

于 2010-01-20T08:45:10.483 に答える
0

コントロール用の何らかのコンテナが必要ですよね?Canvas を使用していて、コントロールをその中に完全に配置するだけでは、ほとんど運がありません。これは、インターフェイスのスケーリングにはあまり適していません。

ただし、入れたものを特定の方法でレイアウトするさまざまなコンテナー コントロールがあります。また、適切に使用すれば、ウィンドウのサイズ変更にも対応します。Grid は非常に柔軟ですが、StackPanel と DockPanel も非常に便利な場合があります。

必要に応じて、それらをネストできます。

于 2010-01-20T01:31:24.257 に答える