2015-09-20 2 views
1

Я хотел бы узнать, можно ли изменять размер XAML TextBox во время выполнения и через взаимодействие с пользователем. То есть пользователь использует ручки для ручного изменения размера TextBox по мере необходимости. Хотя TextBox, похоже, имеет событие sizeChanged, я не могу понять, как я могу изменить размер вручную во время выполнения.Как изменить размер текстового поля XAML во время выполнения через взаимодействие с пользователем?

+0

Почему вы не можете установить ширину и высоту во время выполнения? – WiredPrairie

+1

Возможный дубликат [Изменение размера элемента управления в приложении для хранилища Windows] (http://stackoverflow.com/questions/15607618/resizing-a-control-in-windows-store-app) –

+0

Обычно считается вежливым, чтобы отметить правильный ответ. –

ответ

0

Ahmad,

Есть 2 решения, которые у меня есть для вас.

Решение 1:

Простое, авансовые решение может быть с помощью сетки разветвителей, который помогает вам в перетащить & изменение размера элемента управления. Количество разделителей сетки зависит от способа изменения размера TextBox. Ниже приведен пример кода:

<Grid>... 
<GridSplitter Grid.Row="1" Grid.ColumnSpan="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="4" BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent"/> 
<TextBox Grid.Row="2" Grid.Column="0" Margin="6,6,6,6" Name="RequestTextBox" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" Text="{Binding Request, Mode=TwoWay}"/> 
<GridSplitter Grid.Row="2" Grid.ColumnSpan="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="4" BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent"/> 
...</Grid> 

Примечание: Вы можете также положить 4 сетки разветвители, чтобы изменить размер текстового поля из 4-х направлениях, но хэдз вверх, что вы, возможно, придется определить DragCompleted событие на GridSplitter (ов) регулировать ширину & высоты.

Решение 2:

Кроме того, вы можете сделать это с Adorner. Ниже представлена ​​серия из четырех частей по этой теме без и с помощью Adorners:

P.S: Я не суммировал то, что передают ссылки, поскольку тема сама по себе настолько обширна. Поэтому советуем вам проверять ссылки. Только в случае, если ссылки идут мертвые, погуглить графических элементов не должен быть слишком жестким;)

+0

Только WPF имеет adorners, а не WinRT. – WiredPrairie

+0

@WiredPrairie: Мой плохой. Помогло бы решение решетки сетки? – Ankit

+0

Он также не обращается к исходному запросу. В простейшем из UI он будет работать. – WiredPrairie

2

Вот XAML для создания эффекта :

<Grid x:Name="MyTextBox" Width="250" 
     MinWidth="250" MinHeight="60" 
     Margin="20" HorizontalAlignment="Left" 
     VerticalAlignment="Top"> 
    <Grid.Resources> 
     <Style TargetType="Polygon"> 
      <Setter Property="Fill" Value="{ThemeResource SystemControlBackgroundAltHighBrush}" /> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
      <Setter Property="IsHitTestVisible" Value="False" /> 
      <Setter Property="RenderTransform"> 
       <Setter.Value> 
        <CompositeTransform TranslateX="5" TranslateY="5" /> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="RenderTransformOrigin" Value="0.5,0.5" /> 
      <Setter Property="Stroke" Value="{ThemeResource SystemControlForegroundChromeDisabledLowBrush}" /> 
      <Setter Property="StrokeThickness" Value="{ThemeResource TextControlBorderThemeThickness}" /> 
      <Setter Property="VerticalAlignment" Value="Bottom" /> 
     </Style> 
     <Style TargetType="TextBox"> 
      <Setter Property="AcceptsReturn" Value="True" /> 
      <Setter Property="HorizontalAlignment" Value="Stretch" /> 
      <Setter Property="TextWrapping" Value="Wrap" /> 
      <Setter Property="VerticalAlignment" Value="Stretch" /> 
     </Style> 
     <Style TargetType="Thumb"> 
      <Setter Property="Background" Value="Transparent" /> 
      <Setter Property="BorderBrush" Value="Transparent" /> 
      <Setter Property="Height" Value="30" /> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
      <Setter Property="RenderTransform"> 
       <Setter.Value> 
        <CompositeTransform TranslateX="10" TranslateY="10" /> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="VerticalAlignment" Value="Bottom" /> 
      <Setter Property="Width" Value="30" /> 
     </Style> 
    </Grid.Resources> 
    <TextBox Header="First Name" Text="Jerry" /> 
    <Thumb DoubleTapped="GrabDoubleTapped" DragDelta="GrabDelta" Loaded="GrabLoaded" /> 
    <Polygon Points="0,19 19,0, 19,19" /> 
</Grid> 

А вот код-позади, чтобы справиться с этим:

Windows.Foundation.Size originalSize; 
private void GrabLoaded(object sender, RoutedEventArgs e) 
{ 
    originalSize = MyTextBox.RenderSize; 
} 

private void GrabDelta(object sender, Windows.UI.Xaml.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    MyTextBox.Width = MyTextBox.ActualWidth + e.HorizontalChange; 
    MyTextBox.Height = MyTextBox.ActualHeight + e.VerticalChange; 
} 

private void GrabDoubleTapped(object sender, Windows.UI.Xaml.Input.DoubleTappedRoutedEventArgs e) 
{ 
    MyTextBox.Height = originalSize.Height; 
    MyTextBox.Width = originalSize.Width; 
} 

Вы можете легко обернуть это в элемент управления или контроля пользователя или что-то. Конечно.

выглядит так:

enter image description here

удачи!

Смежные вопросы