文本框是一个图形用户界面元素,它允许简单的输入文本,通常只有一行文本。
我在 App.xaml 中定义了以下样式 <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> ...</desc> <question vote="13"> <p>我在 App.xaml 中定义了以下样式</p> <pre><code><Style x:Key="textBoxMultiline" TargetType="{x:Type TextBox}" > <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="HorizontalScrollBarVisibility" Value="Hidden" /> <Setter Property="MinHeight" Value="50" /> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </code></pre> <p>在整个解决方案中,我们在每个需要简短文本的文本框上使用它。</p> <pre><code><TextBox x:Name="textBoxDescription" Grid.Row="2" Grid.Column="1" Style="{DynamicResource textBoxMultiline}" /> </code></pre> <p>一切都很好,但随后客户抱怨某些字段被合并在分辨率较低的旧显示器上,因此我在较高的视觉树节点之一上放置了<pre><code>ScrollViewer</code></pre>以防止合并。</p> <pre><code><ScrollViewer Height="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> ... </ScrollViewer> </code></pre> <p>奇怪的是,具有上述样式的 <pre><code>TextBox</code></pre> 开始向右扩展,而不是环绕文本。</p> <p>有没有办法在不删除<pre><code>ScrollViewer</code></pre>的情况下防止这种情况? </p> </question> <answer tick="false" vote="11"> <p>如果您不想对宽度进行硬编码,那么您可以使用元素绑定父项的宽度。</p> <p>这里我将 TextBox MaxWidth 与 ScrollViewer 实际宽度绑定。您还必须确保 ColumnDefinition 宽度应设置为“*”而不是“Auto”。如果将其设置为“自动”,它将忽略 ScrollViewer 宽度并继续扩展 ScrollViewer 和 TextBox 的宽度。 <em><strong>我认为你属于这种情况</strong></em>...</p> <pre><code><Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="scv"> <TextBox Height="30" TextWrapping="Wrap" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}"></TextBox> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="true" vote="9"> <p>您必须为<pre><code>MaxWidth</code></pre>定义一个<pre><code>TextBox</code></pre>,否则没有限制,因为<pre><code>ScrollViewer</code></pre>。</p> </answer> <answer tick="false" vote="6"> <p>@bathineni 提供的解决方案帮助我解决了我的问题。这对我有用:</p> <pre><code><Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="50"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Grid.Column="0" Width="30" Height="23" Margin="10,5" Content="..."/> <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Disabled" verticalScrollBarVisibility="Disabled" Name="scv"> <TextBox Height="25" Text="Insert here long text" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" /> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="false" vote="1"> <p>第一个解决方案是使用数据绑定在 XAML 中实现的。我建议你不要单独绑定控件。 XAML 解决方案是通过将具有所需 ActualWidth 和 ActualHeight 属性的控件绑定到文本框 MaxHeight 和 MaxWidth 属性来实现的。</p> <pre><code><TextBlock x:Name="PasswordText" Margin="0,0,0,20" FontFamily="Bahnschrift SemiBold Condensed" Text="PASSWORD" FontSize="20"> <TextBox x:Name="PasswordTextBox" MaxWidth="{Binding ElementName=PasswordText, Path=ActualWidth}" MaxHeight="{Binding ElementName=PasswordText, Path=ActualHeight}"> </code></pre> <p>下一个解决方案是通过在 XAML 中生成 Loaded 事件,在 C# 代码中创建它,然后在 Loaded 事件中将文本框的 MaxWidth 和 MaxHeight 属性设置为文本框 ActualWidth 和 ActualHeight 属性来实现。</p> <pre><code>// It doesn't have a problem like in XAML if you pass the textbox its own // ActualWidth and ActualHeight to the MaxWidth and MaxHeight proprieties. private void Log_In_Page_Loaded(object sender, RoutedEventArgs e) { UsernameTextBox.MaxHeight = UsernameTextBox.ActualHeight; UsernameTextBox.MaxWidth = UsernameTextBox.ActualWidth; } </code></pre> <p>选择更适合你设计的一个,但我认为,在我看来,这是解决这个问题最有效、最简单、最稳定、最有效的方法。</p> </answer> <answer tick="false" vote="0"> <p>对我有用。如果你想让滚动条出现在文本框中,你可以添加</p> <pre><code>HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" </code></pre> <p>到文本框 </p> </answer> <answer tick="false" vote="0"> <p>您必须设置 <pre><code>MaxWidth</code></pre><pre> 的 </pre><code>Container Control</code></p> <pre><code><Grid x:Name="RootGrid" Margin="6,6,8,8" Width="500" MaxWidth="500"> <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <GroupBox Name="contentGroup" Header="Content" Grid.Row="0"> <TextBox Name="content"/> </GroupBox> </Grid> </ScrollViewer> </code></pre> <p></p> </answer> <answer tick="false" vote="0"> <p>当我需要我的<pre><code>TextBox</code></pre>在调整大小时与其自动调整大小的<pre><code>Grid</code></pre>列一起拉伸时,我遇到了这个问题,这意味着<pre><code>MaxWidth</code></pre>不起作用,但仍然需要防止<pre><code>TextBox</code></pre>拉伸及其内容。</p> <p>我最终所做的是将这个事件处理程序链接到<pre><code>SizeChanged</code></pre>:</p> <pre><code>private void TextBox_SizeChanged(object sender, SizeChangedEventArgs e) { TextBox textBox = (TextBox)sender; if (textBox.CanUndo && e.NewSize.Width > e.PreviousSize.Width) { textBox.Width = e.PreviousSize.Width; } } </code></pre> <p>将文本写入文本框是用户可以撤消的操作,而其他可能导致调整大小的操作(元素的初始绘制、父容器的拉伸等)则无法从文本框中撤消。因此,通过检查 <pre><code>CanUndo</code></pre>,我们可以确定 <pre><code>SizeChanged</code></pre> 是否是由写入文本或其他内容触发的。</p> <p><pre><code>e.NewSize.Width > e.PreviousSize.Width</code></pre> 检查是必要的,因为没有它,<pre><code>SizeChanged</code></pre> 事件将从自身内部无限地调用,因为要恢复拉伸,我们需要 <em>将大小</em> 更改回原始值,这本身就会触发事件。</p> <p>这有点棘手,但我还没有遇到任何问题。</p> </answer> <answer tick="false" vote="0"> <p>我不知道为什么,但我无法让 ScrollViewer 解决方案工作。我需要一个具有固定初始宽度的 TextBox 来实现数字向上/向下控件 - 在此控件中,TextBox 独立于输入而缩小和增长,如果 UI 在您键入时发生变化,这看起来非常烦人。</p> <p>所以,我发现以下使用 2 个文本框的解决方案适合我。第一个文本框是为用户键入输入而显示的文本框,第二个文本框通过依赖属性 (DisplayLength) 和下面进一步显示的转换器进行初始化。</p> <p>将第一个文本框的 MaxWidth 属性绑定到第二个文本框的 Width 属性可以固定大小,以便用户可以键入他们想要的内容,但即使有更多可用的 UI 空间,文本框的显示宽度也不会改变。</p> <pre><code><TextBox x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxWidth="{Binding ElementName=TBMeasure, Path=ActualWidth}" /> <!-- Hidden measuring textbox ensures reservation of enough UI space according to DisplayLength dependency property --> <TextBox x:Name="TBMeasure" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayLength, Converter={StaticResource ByteToPlaceHolderStringConverter}}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="Hidden"/> // Converter [ValueConversion(typeof(byte), typeof(string))] public sealed class ByteToPlaceHolderStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if ((value is byte) == false) return Binding.DoNothing; byte byteVal = (byte)value; string retString = string.Empty; for (int i = 0; i < byteVal; i++) retString = retString + "X"; return retString; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Binding.DoNothing; } } </code></pre> </answer> </body></html>
WPF TextBox 使用 StringFormat 键入问题
通过 StringFormat='{}{0:F2} 在 WPF 中的 TextBox 中输入 2 位小数格式的值时,有没有办法“绕过”点并“覆盖”小数? 当我输入“...
是否可以将 devextreme 文本框字段的掩码设置为模型的属性?就像将掩码属性绑定到模型的属性值一样? 例如: 模型: 公共我的班级{ 公共字符串
我需要一个文本框来输入人体身高。我需要使用 jquery 来做到这一点。是否有我可以用来执行验证的插件或代码示例。有人可以帮我验证...
我正在尝试在 WPF 中创建自定义文本框模板。 我的文本框周围有一个 1 像素的边框,这个边框的边距为 8 像素,这都是简单的东西,这里没有问题。 我遇到的问题是...
WPF TextBox MenuItem 在移动鼠标时失去焦点
在我的 WPF 应用程序中,我希望菜单项有一个文本框。我已经设法使用以下代码来做到这一点: 在我的 WPF 应用程序中,我希望菜单项有一个文本框。我已经设法使用以下代码来做到这一点: <Menu Height="23" HorizontalAlignment="Stretch" Name="MainMenu" VerticalAlignment="Top"> <MenuItem Header="File"> <MenuItem Header="Exit" Click="menuItemExit_Click" /> </MenuItem> <MenuItem Header="Settings"> <MenuItem Header="Some setting" IsCheckable="True" /> <Separator /> <MenuItem> <MenuItem.Header> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="Some value:" Margin="0,3,6,0" Padding="0" /> <TextBox Margin="0,0,0,6" Grid.Column="1" /> </Grid> </MenuItem.Header> </MenuItem> </MenuItem> </Menu> 此代码按我的预期显示菜单项,但如果我开始在文本框中输入一些值,然后将鼠标(而不是单击)移离文本框菜单项,则文本框将失去焦点,并且我无法继续输入,直到我再次单击文本框。如何实现与 WinForms 中的文本框菜单项相同的行为?也就是说,只有当用户在文本框外部单击或按 Tab 键时,文本框才会失去焦点。 提前致谢。 正如我所写,我不确定您如何使用菜单控件。 但也许这段代码可以帮助你或给你一个提示: <TextBox Margin="0,0,0,6" Grid.Column="1" PreviewLostKeyboardFocus="OnPreviewLostKeyboardFocus"/> 以及相应的方法: private void OnPreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { if (MainMenu.IsKeyboardFocusWithin) { e.Handled = true; } } 我知道这个答案可能为时已晚,无法帮助您,但也许它会帮助任何寻找此问题解决方案的人。 在菜单项上设置 Focusable=false 也可以。 它仍然允许单击它们并允许它们包含的控件获得焦点。 但是,它禁用了仅使用键盘导航菜单的功能,从而引入了可访问性问题。 可访问性问题可以通过一点创意来解决,方法是为每个菜单项提供一个可聚焦的元素。 例如: <MenuItem Focusable="False"> <MenuItem.Header> <StackPanel Orientation="Horizontal" Focusable="True" FocusVisualStyle="{x:Null}"> <TextBlock Text="Do something!" /> </StackPanel> </MenuItem.Header> </MenuItem> 需要 FocusVisualStyle="{x:Null}" 代码来隐藏否则会出现的虚线焦点(并且在菜单中看起来不合适)。 也许这有帮助: <MenuItem StaysOpenOnClick="True"> <MenuItem.Header> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="Some value:" Margin="0,3,6,0" Padding="0" /> <TextBox Margin="0,0,0,6" Grid.Column="1" /> </Grid> </MenuItem.Header> </MenuItem> 自定义 ComboBox 项目也面临同样的问题。在我的例子中,这个问题的根本原因是 ComboBoxItem 事件的 MouseEnter 处理程序: e.Handled = true; this.ParentComboBox?.NotifyComboBoxItemEnter(this); base.OnMouseEnter(e); 而且NotifyComboBoxItemEnter看起来像 if (!this.IsDropDownOpen || Mouse.Captured != this || !this.DidMouseMove()) return; this.HighlightedInfo = this.ItemInfoFromContainer((DependencyObject) item); if (this.IsEditable || item.IsKeyboardFocusWithin) return; item.Focus(); 所以它确实将焦点集中在鼠标输入上。我怀疑菜单项中可能有类似的东西(例如扩展子菜单)。 我通过重写自定义组合框项类上的 OnMouseEnter 来避免调用基本方法解决了这个问题。 接受的解决方案有效,但会阻止键盘导航。
我们可以在 swiftui 中不使用堆栈的情况下在文本框中添加图像吗?
我正在尝试在不使用 zstack 的情况下将图像添加到 swiftui 中的文本输入中,因为这会导致整个视图出现错误,这是预期的结果,有没有一种方法可以在不使用 u 的情况下添加它们...
我有一个数字输入文本框,我想允许用户编辑,但不想允许用户输入除数字之外的任何其他文本。我希望他们只能使用 nu 上的箭头...
如何强制用户仅从 VB.Net 中的 datagridview 自动完成文本框中选择建议的条目
我试图强制用户仅从 VB.Net 中的 datagridview 自动完成文本框中选择建议的条目 还有一个我希望在 &q...
我正在尝试在选择框更改时启用或禁用多个文本框。 这意味着当我在选择框中选择任何选项时,所有字段都应启用。 尝试了下面的 JavaScript 和 Html...
Javafx eclipse 文本输入在数字或混合时验证,在非数字时拒绝
在JavaFx eclipse应用程序中,在将数据保存到SQL数据库之前,需要验证以下条件:类似数值或混合。但是,如果纯粹是非数字,则拒绝...
我有这个Python代码,它显示一个屏幕,中间有一个文本框,按下回车键时打印其文本: 导入 pygame_gui,pygame pygame.init() 屏幕 = pygame.display.set_mode((500,5...
基于此处的解决方案:从“无限”动态控件将值输入数据库 我可以在运行时成功创建动态 ASP.NET 控件。所以如果用户输入 10,它会...
在 JavaFX Eclipse 中验证文本数据输入为数字或混合而不是非数字[重复]
在 JavaFX Eclipse 应用程序中,当用户在文本框中输入数据后按下 Enter 键时,在将输入的值保存到 SQL 数据库之前,需要验证为: 要么纯粹
在 JavaFX Eclipse 中验证文本数据输入为数字和非数字混合而不是非数字[重复]
需要验证文本框中输入的数据为: 纯数字,例如:1325654 或混合,例如:Wa4433 但不是纯粹的非数字,例如:AbcdE, 如何验证?
我在应用程序中使用curses python 库,并且还实现了一个文本框https://docs.python.org/3/library/curses.html#textbox-objects。 有没有办法在
我不希望我的文本框为空。我希望它保留空之前的值并在删除时写入它。我正在使用 KeyDown 事件,但它不起作用。删除时不触发...
首先,我希望这个问题以前没有被问过,我找不到类似的问题。 我在用户窗体中有几个文本框,根据...的数量自动生成
我正在开发一个同时具有 WinForms 和 WPF 控件的应用程序;在 WinForms TextBox 中选择的文本背景颜色分别为蓝色和白色,而在 WPF TextBox 中则为浅色...
我想在装配体中自动保存 SolidWorks 文件。将保存的每个部件的名称是根据用户表单中给出的输入创建的。 用户可以确定金额并...