2011-08-26 96 views
3

我有一个数据录入应用程序,其中包括用于录制注释的文本框。这些注释是特定于正在输入的数据的,并且通常是多余的(对一系列数据记录给出相同的评论)。带有静态和可编辑文本的WPF文本框?

我打算添加一个组合框,并带有一个罐装评论选项来覆盖最常见的情况。从组合框中选择一个时,注释文本框将填充注释。

但是,我还需要能够在文本框内的固定消息之后输入其他注释。但我不希望它能够改变罐头消息。所有输入的评论需要在罐头评论之后提交。

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

我到目前为止唯一的想法是抓住TextInput事件并不断用覆盖消息覆盖文本框内容的开始,但结果并不会很漂亮。

+0

一个WPF文本框中没有内置该功能,正如你指出的那样,会采取复杂的事件处理程序来使其工作。 您可以在文本框上方显示另一个文本字段以显示预设结果(只读)和允许可编辑评论的文本框?如果是这样,您可以将您发送到数据库/服务/任何内容的最终值中的两个字段连接起来。 – EtherDragon

+0

这更多的是视觉挑战。注释框不是很大,因此,注释和注释的组合可能导致滚动。如果罐装响应始终可见,则用于输入评论的可用空间可能非常小。 – Nairou

回答

2

或许覆盖一个TextBox模板,以便它包含Panel与套用消息ComboBox和常规TextBox用户输入。

样式内部TextBox所以它没有正常的文本框边框,并且样式ComboBox,以便当它没有焦点时它不显示它的边界。

当组合框具有焦点,它看起来像一个TextBox内的组合框,如果它不具有焦点将只是看起来像一个大的文本框

+0

我的最终解决方案最终与此类似(并受此启发)。我去了一个ScrollViewer,并在其中放置了一个TextBlock和TextBox,一个在另一个之上。 ScrollViewer允许两者一起滚动,就像是同一个TextBox的一部分一样。 – Nairou

3

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

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}" /> 
0

不,我意识到,你不能有这样的事情。但是,您可以:

  1. 对顶(侧)将其与应用
  2. 如果你有足够的空间,有一个readonlt文本框注释的预览,或多或少像这样注释的静态文本标签编辑作品。
  3. 你可以试着不让删除从绑定的数据中的字符数计(这将是真正静态文本)

希望这有助于。

0

我会采取稍微不同的策略。

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

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

0

2个其他选项。

  1. 覆盖文本框的样式,包括固定文本 - 通虽然有些templatebinding固定文本
  2. 您可以捕获文本框中PreviewKey <>事件,并取消其修改“固定”的文字,如果不让事件通过。

但2文本框是视觉外观为1仍然是一个更好的选择,但 - 最容易实现和维护