Ich versuche, mein einfaches Steuerelement zu ändern, so dass das Textfeld nicht wächst, wie der Benutzer langen Text eingibt. Ich habe mir einige Lösungen hier bei Stackoverflow angeschaut, die vorschlagen, ein Gitter und einen unsichtbaren Rahmen zu verwenden und die Breite des Textfelds an die tatsächliche Breite des Rahmens zu binden, aber ich kann nicht scheinen, dass es in meinem Setup funktioniert. HierStoppen WPF TextBox von mit Text wachsen
ist die XAML meiner Kontrolle:
<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>
Irgendwelche Ideen? Ich brauche die zoom.png, um "innerhalb" des Textfelds zu erscheinen, also verwende ich ein horizontales Stapelpanel und platziere das Bild und das Textfeld nebeneinander, beide von demselben Rand umgeben.
Gibt es eine Möglichkeit für mich, meine Textbox daran zu hindern, automatisch zu wachsen, wenn Text eingegeben wird?
Danke.
UPDATE:
Unten ist die XAML ich mit dem Testen bin.
<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>
Ich füge einfach meine Benutzersteuerung zum MainRegion des Fensters.
Danke. Ich habe es versucht und es hat mit einem Fehler für mich funktioniert. Es kann nicht verwendet werden, wenn Sie einen Scrollviewer verwenden. Ich hatte ursprünglich eine und was passierte, ist, dass die Textbox wuchs, als die Benutzeroberfläche wuchs, aber nicht schrumpfte, wenn die Benutzeroberfläche geschrumpft wurde. – famousKaneis
@nameless Sie müssen 'HorizontalScrollBarVisibility =" False "für Ihren Scrollviewer festlegen, damit Ihre Textbox der Verkleinerung der Fensterbreite folgt. – M463
Dies sollte in WPF selbst behoben worden sein, wenn dies die einzige wirkliche Lösung ist ... (Ich habe noch nichts Besseres gefunden und wir sind 2016 ...) – Arwin