在WPF边框中的Stackpanel中使文本框宽度自动更改

时间:2018-08-10 13:38:27

标签: wpf textbox

我想将Button放在TextBox中,但是由于发现不可能,所以我决定执行以下操作:

enter image description here

Xaml如下所示:

<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0" 
            BorderBrush="Gray" BorderThickness="1">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,0">
            <TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" 
                     Width="245"/>
            <Button  Content="*" Width="15" BorderThickness="1"/>
        </StackPanel>
    </Border>

我的问题是,当我调整窗口大小(减小宽度)时,我的Button消失了:

enter image description here

我希望它的行为像DateTimePicker一样。我尝试了多种方法来自动调整TextBox的宽度(*的宽度不是正确的输入,auto减小了TextBox的宽度,我也尝试定义样式资源在StackPanel资源中使用TextBox宽度,但它也无法正常工作),但尚未找到正确的方法。

2 个答案:

答案 0 :(得分:1)

StackPanel替换为Grid

<Border Margin="10,0,10,0" BorderBrush="Gray" BorderThickness="1">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
        <Button Grid.Column="1" Content="*" Width="15" BorderThickness="1"/>
    </Grid>
</Border>

答案 1 :(得分:1)

使用Grid而不是StackPanel。对于自适应布局,设置固定大小(宽度/高度)不是一个好主意。网格将允许TextBox拉伸。

一个选项是为TextBox和Button具有单独的列:

<?php
    error_reporting(E_ALL);
ini_set('display_errors', 'Off');
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "uwe.nachname@gmail.com","From: webmaster@example.com");
}
//set error handler
set_error_handler("customError",E_ALL);
  echo 'now the error: ';
  echo gibtsnicht();
?>

或者将它们放在相同的单元格中,并让Button与TextBox重叠(看起来像TextBox的一部分,但可以隐藏长文本的一部分):

<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0" 
        BorderBrush="Gray" BorderThickness="1">
    <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="*"/>
          <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
        <Button Content="*" Grid.Column="1" Width="15" BorderThickness="1"/>
    </Grid>
</Border>