2015-10-28 2 views
1

Я создаю программу, чтобы сообщить пользователю баланс своего аккаунта и тому подобное. Я показываю эту информацию на Grid с ViewBox (поэтому ее можно изменить до любого разрешения экрана), проблема в том, что ViewBox не заполняет свое пространство в Grid. Вот мой код:Viewbox заполнить все пространство сетки столбца WPF

<Grid ShowGridLines="True"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="0.5*"/> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="0.5*"/> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <Viewbox Grid.Row="0" Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Right" VerticalAlignment="Stretch"> 
          <TextBlock Foreground="#5a5a5a" TextAlignment="Center" Margin="1">Subtotal</TextBlock> 
         </Viewbox> 
         <Viewbox Grid.Row="0" Grid.Column="2" Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
          <TextBox Margin="5" Text="155.60" TextAlignment="Center" IsReadOnly="True"/> 
         </Viewbox> 
         <Viewbox Grid.Row="1" Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Right" VerticalAlignment="Stretch"> 
          <TextBlock Foreground="#5a5a5a" TextAlignment="Center" Margin="1">Descuentos</TextBlock> 
         </Viewbox> 
         <Viewbox Grid.Row="1" Grid.Column="2" Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
          <TextBox Margin="5" Text="0.0" TextAlignment="Center"/> 
         </Viewbox> 
</Grid> 

Вот результат:

enter image description here

Как вы можете видеть, что «скидка» TextBox меньше, чем выше, и мне нужно, чтобы они имели одинаковую ширину и высоты. Как я могу достичь этого? Я помещаю все в ViewBox, чтобы изменить размер для меня, но правильно? Я уже пробовал несколько меток вроде this, но это делает текст действительно маленьким.

ответ

1

Вы не нуждаетесь в Viewboxes вообще:

<TextBlock Grid.Row="0" Grid.Column="1" Foreground="#5a5a5a" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" TextAlignment="Center" Margin="1">Subtotal</TextBlock> 
    <TextBox Grid.Row="0" Grid.Column="2" Margin="5" Text="155.60" TextAlignment="Center" IsReadOnly="True"/> 
    <TextBlock Grid.Row="1" Grid.Column="1" Foreground="#5a5a5a" TextAlignment="Center" Margin="1">Descuentos</TextBlock> 
    <TextBox Grid.Row="1" Grid.Column="2" Margin="5" Text="0.0" TextAlignment="Center"/> 

прекрасно работает на моей машине, независимо от того, как я изменить его размер.

Если вам нужно сохранить Viewboxes вы можете заставить ваши Textboxes быть того же размера с помощью привязок

<Viewbox Grid.Row="0" Grid.Column="1" Stretch="Uniform" > 
    <TextBlock Foreground="#5a5a5a" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" TextAlignment="Center" Margin="1">Subtotal</TextBlock> 
    </Viewbox> 
    <Viewbox Grid.Row="0" Grid.Column="2" Stretch="Uniform" > 
     <TextBox x:Name="SubtotalBox" Grid.Row="0" Grid.Column="2" Margin="5" Text="155.60" TextAlignment="Center" IsReadOnly="True"/> 
    </Viewbox> 
    <Viewbox Grid.Row="1" Grid.Column="1" Stretch="Uniform" > 
    <TextBlock Grid.Row="1" Grid.Column="1" Foreground="#5a5a5a" TextAlignment="Center" Margin="1">Descuentos</TextBlock> 
    </Viewbox> 
    <Viewbox Grid.Row="1" Grid.Column="2" Stretch="Uniform" > 
      <TextBox Grid.Row="1" Grid.Column="2" Margin="5" Text="0.0" MaxLength="6" Height="{Binding ElementName=SubtotalBox, Path=ActualHeight}" Width="{Binding ElementName=SubtotalBox, Path=ActualWidth}" TextAlignment="Center"/> 
    </Viewbox> 

Это связывает ширину и высоту второго Textbox к тому же, как первый, держа его в соответствие и заставляя Viewbox масштабироваться для размещения большего текстового поля.

+0

Без текстового поля текста текстового поля действительно мало (это не произошло с Viewbox). –

+0

Я понимаю, что вы имеете в виду. Вы всегда можете отрегулировать размер текста отдельно, если вам нужно. Используется ли для вас второй метод? – Knells

+0

Спасибо за ваше время, второй метод работает, но не совсем то, что мне нужно. Мне нужно, чтобы оба поля Textbox заполнили все пространство сетки столбцов, это также сделает их одинаковыми. –