Сделать ширину текстового поля автоматически изменяемой в stackpanel, который находится в border, wpf

Я хотел поместить 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, но это тоже не работает), но пока не нашел правильного пути.

0
0
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Замените 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>

Я этого не знала :)

A.M 10.08.2018 15:53

используйте Grid вместо StackPanel. Установка фиксированного размера (ширина / высота) не является хорошей идеей для адаптивного макета. Сетка позволит TextBox растягиваться.

один из вариантов - иметь отдельные столбцы для TextBox и Button:

<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>

в качестве альтернативы поместите их в ту же ячейку и позвольте кнопке перекрывать TextBox (он будет выглядеть как часть TextBox, но может скрыть часть длинного текста):

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

встречайте Самая быстрая пушка на западе.

ASh 10.08.2018 19:10

Другие вопросы по теме