2013-12-09 28 views
0

我想在我的WPF C#应用程序中使用TextBox,该应用程序在用许多文本更改文本内容时不会自动更改其大小。如何在更改文本内容时禁用TextBox来调整大小?

例子:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" SizeToContent="WidthAndHeight"> 
    <Grid> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition></ColumnDefinition> 
       <ColumnDefinition></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <TextBox x:Name="textBox" Grid.Column="0"> 
       hello world</TextBox> 
      <Button x:Name="button" Grid.Column="1" Click="button_Click"> 
       Add many Text 
      </Button> 
     </Grid> 
    </Grid> 
</Window> 

后面的代码:

private void button_Click(object sender, RoutedEventArgs e) 
{ 
    textBox.Text = "many text many text many text many text many text many text many text many text many text many text many text many text many text many text many text"; 
} 

有了这个应用程序,在主窗口适合其大小由SizeToContent="WidthAndHeight"内容。点击按钮后,TextBox将调整自身和整个窗口的大小。

TextBox的文本发生变化时,是否可以禁用调整大小,但在用户调整窗口大小时仍保留可调整大小的属性?

+0

它是一个要求,即'SizeToContent'设置呀?否则,我只是说改为'SizeToContent =“高度”'。它不会自动调整大小,但用户仍可以手动调整大小。 –

回答

2

将TextBox的MaxWidth设置为你想要的东西?

<TextBox x:Name="textBox" Grid.Column="0" MinWidth="0" MaxWidth="320"> 
      hello world 
</TextBox> 

maxwidth是我的任意数字。当窗口被调整大小时,这应该仍然调整文本框的大小。

,或者你可以做这样的事情

<TextBox x:Name="textBox" Grid.Column="0" MinWidth="0" MaxWidth="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=ActualWidth}"> 
      hello world 
</TextBox> 
+0

谢谢。你的第二个建议确实对我有用。使用此解决方案时,文本框不会调整大小,但文本框仍然会在用户更改窗口大小时调整大小。这正是我想要的。由于我对绑定不是很熟悉,我想知道行MaxWidth =“{Binding RelativeSource = {RelativeSource AncestorType = Window},Path = ActualWidth}”会发生什么?也许你可以更详细地解释或给我一个很好的链接?我真的很感激。 –

+0

相对绑定的作用是监听值更改并将值设置为其相应的绑定目标。因此,当用户调整窗口宽度时,它还会将文本框的MaxWidth设置为窗口的实际宽度。 –

相关问题