2009-07-16 24 views
1

Ich bin neu bei WPF. Ich habe ein WPF-Fenster mit einer Reihe von Labels sowie eine ListBox.WPF/XAML - Textgröße auf Fenstergröße skalieren

Wenn ich die Größe des Fensters ändere, möchte ich die Größe einiger Etiketten skalieren, aber nicht alle. Ich möchte auch nicht, dass die ListBox skaliert - nur ein paar Labels.

Ich verstehe, dass ich eine Viewbox verwenden kann, um die Größe zu ändern, wie das Fenster die Größe ändert, aber so viel wie ich damit durcheinander komme, bekomme ich nicht den gewünschten Effekt. Natürlich kann ich das ganze Ding nicht mit einer Viewbox umgeben, weil das alles in der Größe ändern würde, also dachte ich mir, ich müsste eine Reihe von Viewboxen im gesamten Fenster um jedes Label legen, das ich erweitern möchte. Aber natürlich ... überhaupt dehnt sich nichts aus, wenn ich das tue.

Entlang der gleichen Linien, wenn ich die Beschriftungen erweitern, gibt es andere Beschriftungen, die direkt neben diesen Beschriftungen bleiben müssen, weil sie Kennungen sind.

Also ... hier ist der XAML, den ich an dieser Stelle habe. Ich weiß nicht einmal, ob ich auf dem richtigen Weg bin. Jede Hilfe, die die Etiketten mit der Zahl in ihnen mit dem Fenster erweitert, würde geschätzt werden.

<Window x:Class="WpfApplication7.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication7" 
    Title="Window1"> 
    <StackPanel Orientation="Horizontal"> 
     <ListBox Margin="2"> 
      <ListBoxItem>a</ListBoxItem> 
      <ListBoxItem>b</ListBoxItem> 
      <ListBoxItem>c</ListBoxItem> 
     </ListBox> 
     <StackPanel Orientation="Vertical"> 
      <Label>Title</Label> 
      <StackPanel Orientation="Horizontal"> 
       <Grid> 
        <Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions> 
        <Label Grid.Row="0">A</Label> 
        <Label Grid.Row="1">B</Label> 
        <Label Grid.Row="2">C</Label> 
        <Label Grid.Row="3">D</Label> 
       </Grid> 
       <Grid> 
        <Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions> 
        <Viewbox Grid.Row="0" Stretch="Fill"> 
         <Label>1</Label> 
        </Viewbox> 
        <Viewbox Grid.Row="1" Stretch="Fill"> 
         <Label>2</Label> 
        </Viewbox> 
        <Viewbox Grid.Row="2" Stretch="Fill"> 
         <Label>3</Label> 
        </Viewbox> 
        <Viewbox Grid.Row="3" Stretch="Fill"> 
         <Label>4</Label> 
        </Viewbox> 
       </Grid> 
       <Grid> 
        <Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions> 
        <Viewbox Grid.Row="0" Stretch="Fill"> 
         <Label>5</Label> 
        </Viewbox> 
        <Viewbox Grid.Row="1" Stretch="Fill"> 
         <Label>6</Label> 
        </Viewbox> 
        <Viewbox Grid.Row="2" Stretch="Fill"> 
         <Label>7</Label> 
        </Viewbox> 
        <Viewbox Grid.Row="3" Stretch="Fill"> 
         <Label>8</Label> 
        </Viewbox> 
       </Grid> 
       <Grid> 
        <Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions> 
        <Label Grid.Row="0">E</Label> 
        <Label Grid.Row="1">F</Label> 
        <Label Grid.Row="2">G</Label> 
        <Label Grid.Row="3">H</Label> 
       </Grid> 
      </StackPanel> 
     </StackPanel> 
    </StackPanel> 
</Window> 

+0

Haben Sie meine fix Arbeit? Sie haben noch keine Antwort gewählt. – Charlie

Antwort

2

Sie sind auf dem richtigen Weg. Sie müssen jedoch einige Spaltendefinitionen verwenden, und Ihre Zeilendefinitionen sind ein wenig verworren. Sie verwenden eine Reihe verschiedener Layout-Panels, die ineinander integriert sind. Dies wirkt sich auf die integrierte Größe von Viewbox aus. Sie können dieses exakt gleiche Layout mit einem einfachen, einfachen 5x5-Raster (keine Stackpanels) erreichen.

Ich habe dies in der folgenden XAML demonstriert:

<Window x:Class="TestWpfApplication.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:TestWpfApplication" 
Title="Window1"> 
<Window.Resources> 
    <Style TargetType="{x:Type Label}" x:Key="{x:Type Label}"> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="VerticalAlignment" Value="Center"/> 
    </Style> 
</Window.Resources> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 

    <ListBox Grid.RowSpan="5" Grid.Column="0"> 
     <ListBoxItem>a</ListBoxItem> 
     <ListBoxItem>b</ListBoxItem> 
     <ListBoxItem>c</ListBoxItem> 
    </ListBox> 

    <Label Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="4">Title</Label> 

    <Label Grid.Row="1" Grid.Column="1">A</Label> 
    <Label Grid.Row="2" Grid.Column="1">B</Label> 
    <Label Grid.Row="3" Grid.Column="1">C</Label> 
    <Label Grid.Row="4" Grid.Column="1">D</Label> 

    <Viewbox Grid.Row="1" Grid.Column="2"> 
     <Label>1</Label> 
    </Viewbox> 
    <Viewbox Grid.Row="2" Grid.Column="2"> 
     <Label>2</Label> 
    </Viewbox> 
    <Viewbox Grid.Row="3" Grid.Column="2"> 
     <Label>3</Label> 
    </Viewbox> 
    <Viewbox Grid.Row="4" Grid.Column="2"> 
     <Label>4</Label> 
    </Viewbox> 

    <Viewbox Grid.Row="1" Grid.Column="3"> 
     <Label>5</Label> 
    </Viewbox> 
    <Viewbox Grid.Row="2" Grid.Column="3"> 
     <Label>6</Label> 
    </Viewbox> 
    <Viewbox Grid.Row="3" Grid.Column="3"> 
     <Label>7</Label> 
    </Viewbox> 
    <Viewbox Grid.Row="4" Grid.Column="3"> 
     <Label>8</Label> 
    </Viewbox> 

    <Label Grid.Row="1" Grid.Column="4">E</Label> 
    <Label Grid.Row="2" Grid.Column="4">F</Label> 
    <Label Grid.Row="3" Grid.Column="4">G</Label> 
    <Label Grid.Row="4" Grid.Column="4">H</Label> 
</Grid> 

Verwandte Themen