Estoy intentando modificar mi control simple para que el cuadro de texto no crezca a medida que el usuario escribe en texto largo. Eché un vistazo a algunas soluciones publicadas aquí en Stackoverflow que sugieren el uso de una cuadrícula y un borde invisible y vinculando el ancho del cuadro de texto al ancho real del borde, pero parece que no puedo hacer que funcione en mi configuración.Detener que WPF TextBox crezca con el texto
Aquí es el xaml de mi control:
<StackPanel Margin="5,0">
<WrapPanel Margin="0,0,0,5">
<TextBlock Foreground="White" Margin="0,0,2,0">TEXT</TextBlock>
<TextBlock Foreground="#FF0099CC" FontWeight="Bold">MORE TEXT</TextBlock>
</WrapPanel>
<Border Margin="2,4,0,4" BorderThickness="1" SnapsToDevicePixels="True" Background="Black"
BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}">
<StackPanel Orientation="Horizontal">
<Image Source="..\Resources\zoom.png" Width="13"/>
<TextBox Foreground="White" Background="Black" BorderBrush="Transparent">THIS IS SOME TEXT</TextBox>
</StackPanel>
</Border>
</StackPanel>
¿Alguna idea? Necesito el zoom.png para que aparezca "dentro" del cuadro de texto, así que utilizo un panel de pila horizontal y simplemente coloco la imagen y el cuadro de texto uno al lado del otro, ambos rodeados por el mismo borde.
¿Hay alguna manera de evitar que mi cuadro de texto aumente automáticamente mientras se escribe el texto?
Gracias.
ACTUALIZACIÓN:
A continuación se muestra el código XAML que estoy probando con.
<Window x:Class="Desktop.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:composite="http://www.codeplex.com/CompositeWPF"
Title="MyShell" Height="50" Width="900"
WindowStyle="None"
ShowInTaskbar="False"
AllowsTransparency="True"
Background="Transparent"
ResizeMode="CanResizeWithGrip"
WindowStartupLocation="CenterScreen">
<Border BorderBrush="Black"
BorderThickness="1.5"
CornerRadius="5"
Background="Gray">
<ItemsControl composite:RegionManager.RegionName="MainRegion">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Border>
</Window>
<UserControl x:Class="Desktop.SearchTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="50" Margin="0">
<StackPanel Margin="5,0">
<WrapPanel Margin="0,0,0,5">
<TextBlock Foreground="White" Margin="0,0,2,0">TEXT</TextBlock>
<TextBlock Foreground="#FF0099CC" FontWeight="Bold">MORE TEXT</TextBlock>
</WrapPanel>
<Border Margin="2,4,0,4" BorderThickness="1" SnapsToDevicePixels="True" Background="Black"
BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}">
<Grid x:Name="grdTest">
<Image HorizontalAlignment="Left" Source="..\Resources\zoom.png" Width="13"/>
<TextBox Margin="16,0,0,0" Foreground="White" Background="Black" BorderBrush="Transparent" Width="{Binding ElementName=grdTest, Path=ActualWidth}">THIS IS SOME TEXT</TextBox>
</Grid>
</Border>
</StackPanel>
</UserControl>
Acabo de agregar mi control de usuario a la MainRegion de la ventana.
Gracias. Intenté esto y funcionó con un defecto para mí. No se puede usar si usa un scrollviewer. Originalmente tenía uno y lo que estaba sucediendo es que el cuadro de texto creció cuando la interfaz de usuario creció, pero no se achicaría cuando la IU se redujo. – famousKaneis
@nameless Tienes que establecer 'HorizontalScrollBarVisibility =" False "' para tu Scrollviewer para que tu Textbox siga el ancho de la ventana a medida que se encoge. – M463
Esto debería haberse arreglado en WPF si esta es la única solución real ... (No he encontrado nada mejor todavía y estamos en 2016 ...) – Arwin