PaN*_*1Me 14 wpf select textbox
我有这个TextBox.此TextBox位于DataTemplate中:
<DataTemplate x:Key="myTemplate">
<TextBox Text="{Binding Path=FullValue, Mode=TwoWay}" IsEnabled="False" />
...
Run Code Online (Sandbox Code Playgroud)
我想允许用户选择其中的整个文本(可选择通过单击文本框).而且我不想使用任何代码.
怎么做?提前致谢.
Bot*_*000 19
使用IsReadOnly属性而不是IsEnabled允许用户选择文本.此外,如果不应该编辑它,OneWay绑定就足够了.
XAML的想法不是完全取代代码隐藏.最重要的是,您尝试在代码隐藏中仅使用特定于UI的代码,而不是业务逻辑.话虽这么说,选择所有文本是特定于UI的,并且在代码隐藏中不会受到伤害.使用myTextBox.SelectAll().
删除IsEnabled并将TextBox设置为ReadOnly将允许您选择文本但停止用户输入.
IsReadOnly="True"
Run Code Online (Sandbox Code Playgroud)
这种方法的唯一问题是,尽管您无法输入TextBox,但它仍然会显示为"已启用".
要绕过它(如果你想要?)你可以添加一个样式来减轻文本并使背景变暗(使它看起来被禁用).
我添加了以下示例,其中的样式将在禁用和启用的外观之间轻弹文本框.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Background" Value="LightGray" />
</Trigger>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Foreground" Value="DarkGray" />
</Trigger>
<Trigger Property="IsReadOnly" Value="False">
<Setter Property="Background" Value="White" />
</Trigger>
<Trigger Property="IsReadOnly" Value="False">
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox Height="23" Margin="25,22,133,0" IsReadOnly="True" Text="monkey" Name="textBox1" VerticalAlignment="Top" />
<Button Height="23" Margin="25,51,133,0" Name="button1" VerticalAlignment="Top" Click="button1_Click">Button</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
private void button1_Click(object sender, RoutedEventArgs e)
{
textBox1.IsReadOnly = !textBox1.IsReadOnly;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15219 次 |
| 最近记录: |