包含静态和可编辑文本的WPF TextBox?

时间:2011-08-26 16:16:34

标签: c# wpf

我有一个数据输入应用程序,其中包括用于记录注释的文本框。这些注释特定于输入的数据,并且通常是多余的(对于一系列数据记录给出相同的注释)。

我计划添加一个带有选择评论的组合框,以涵盖最常见的情况。从组合框中选择一个时,注释文本框将填充固定注释。

但是,我还需要能够在文本框中的预设消息后输入其他评论。但我不希望改变预制信息的可能性。所有输入的评论都需要在评论后发表。

有没有办法将静态文本应用到无法更改的文本框中,但仍允许在其下方输入文本?

到目前为止,我想出的唯一想法是捕获TextInput事件并使用预制消息不断覆盖文本框内容的开头,但结果并不完全相同。

6 个答案:

答案 0 :(得分:3)

您可以将已禁用的TextBox放在可编辑TextBox的正上方,然后分别删除它们的底部和顶部边框,使它们看起来像一个大的TextBox

答案 1 :(得分:2)

可能会覆盖TextBox模板,使其包含带有预设消息Panel的{​​{1}}和用于用户输入的常规ComboBox

设置内部TextBox的样式,使其没有常规的TextBox边框,并设置TextBox样式,这样当它没有焦点时,它也不会显示它的边框。

当ComboBox具有焦点时,它看起来像TextBox中的ComboBox,如果它没有焦点,它将看起来像一个大的TextBox

答案 2 :(得分:0)

我认为您可以将textBox1.Text与组合框选定的项目绑定为单向模式。以下是代码snipet

<ComboBox Height="23" HorizontalAlignment="Left" Margin="118,48,0,0" Name="comboBox1" VerticalAlignment="Top" Width="144">
            <ComboBoxItem Content="Commanet 1" />
            <ComboBoxItem Content="Comment 2" />
 </ComboBox>
 <TextBox Height="64" HorizontalAlignment="Left" Margin="118,101,0,0" Name="textBox1" VerticalAlignment="Top" Width="144" Text="{Binding ElementName=comboBox1, Path=SelectedItem.Content, Mode=OneWay}" />

答案 3 :(得分:0)

不,我意识到,你不能拥有这样的东西。但你可以:

  1. 在应用静态文字的情况下在其顶部(侧面)贴上标签
  2. 如果你有足够的空间,可以使用readonlt文本框预览评论,或多或少像SO评论编辑器一样。
  3. 您可以尝试不要从绑定数据中删除多个字符数(实际上是静态文本)
  4. 希望这有帮助。

答案 4 :(得分:0)

我会采用略有不同的策略。

如果在Combobox中选择了某些内容,则将所选组合框项目文本和文本框文本中的输入连接起来。如果没有,请使用文本框文本。

当然,您可以使用组合框的选定事件来标记标签,以反映环境的变化。

答案 5 :(得分:0)

另外2个选项。

  1. 覆盖文本框的样式以包含固定文本 - 通过一些模板绑定传递固定文本
  2. 您可以捕获PreviewKey&lt;&gt;文本框上的事件,取消它修改“固定”文本,如果没有,则让事件通过。
  3. 但是,视觉看起来为1的2个文本框仍然是更好的选择 - 最容易实现和维护