【问题标题】:How do I get selected text from a non-editable textbox in silverlight for wp7如何从 silverlight for wp7 中的不可编辑文本框中获取选定的文本
【发布时间】:2011-09-28 00:41:21
【问题描述】:

我想要一个文本框,其中包含用户可以选择但不能编辑的文本,并且我想对该文本执行一些操作。

我创建一个文本框并设置 IsReadOnly="True"。然后当我点击一些文本时,我看到它被突出显示,但是当触发 SelectionChanged 事件时,textBox1.SelectedText 为空。

当 IsReadOnly="False" 时,它可以工作,但是会弹出键盘,这是我不想要的。 有谁知道如何实现我想要的?任何帮助将不胜感激。

【问题讨论】:

    标签: c# silverlight windows-phone-7


    【解决方案1】:

    我自己尝试过(并确认了您所看到的)我个人认为这是一个错误,在这种情况下,您应该在App Hub forums 上报告它。 TextBox.IsReadOnly 属性的文档指出:“如果文本框是只读的,则不允许用户输入或编辑,但可以进行编程更改。用户仍然可以选择文本,并且光标仍然出现。KeyUp 和KeyDown 事件被标记为已处理。”但我不明白为什么您不能获得 SelectedText(或 SelectionStart 和 SelectionLength,对于只读文本框,它们也始终为 0)。

    就解决方法而言,我认为您需要创建一个不提供可编辑界面但仍支持选择的自定义 TextBox 模板,并且不将 IsReadOnly 设置为 false,以便 SelectedText、SelectionStart 和 SelectionLength属性保持有效。不过,这可能是一项艰巨的任务。

    【讨论】:

      【解决方案2】:

      当 TextBox 为只读时,不能设置 TextBox 的 Text 属性,必须将其设置为属性。像这样的 TextBoxName.Attributes.Add("value", "SomeText");

      【讨论】:

      • 我不想更改文本框中的文本,我想知道用户选择了哪些文本。当我使用 Silverlight-not-for-windows-phone 创建它时它可以工作
      • 对不起,我误解了这个问题。看看这个链接对你有没有帮助。它讨论了如何设置 Readonly TextBox msdn.microsoft.com/en-us/library/… 的 SelectionStart 属性
      【解决方案3】:

      我遇到了完全相同的问题,每当触发 SelectionChanged 事件时,我的 ReadOnly 文本框都会将 .SelectionStart 和 .SelectionLength 报告为 0。

      根据 Derek 关于模板的建议,我对文本框的默认控件模板进行了探索。问题的根源似乎是模板在内部使用了两个不同的 xaml 元素,一个是读写的,另一个是只读的。我怀疑发生了什么是只读元素,当 IsReadOnly=True 可见时,会触发 SelectionChanged 事件,但文本框选择属性只报告读写元素的选择状态。

      我敲开了一个精简的控件模板,它只有一个内容呈现器,并取消了基于视觉状态的任何控件样式,即使 IsReadOnly 设置为 True 报告 .SelectionStart 和 .SelectionLength正确。

      您可以通过样式或直接设置文本框的 .Template 属性来应用它。

      <ControlTemplate TargetType="TextBox">
          <Grid
              Margin="{TemplateBinding Margin}"
              Background="Transparent">
              <VisualStateManager.VisualStateGroups>
                  <VisualStateGroup x:Name="CommonStates">
                      <VisualState x:Name="Normal"/>
                      <VisualState x:Name="MouseOver"/>
                      <VisualState x:Name="Disabled" />
                      <VisualState x:Name="ReadOnly" />
                  </VisualStateGroup>
                  <VisualStateGroup x:Name="FocusStates">
                      <VisualState x:Name="Focused"/>
                      <VisualState x:Name="Unfocused"/>
                  </VisualStateGroup>
              </VisualStateManager.VisualStateGroups>
      
              <Border
                  Background="{TemplateBinding Background}"
                  Margin="0">
                  <ContentControl 
                      x:Name="ContentElement" 
                      BorderThickness="0" 
                      Margin="{StaticResource PhoneTextBoxInnerMargin}" 
                      Padding="{TemplateBinding Padding}" 
                      HorizontalContentAlignment="Stretch" 
                      VerticalContentAlignment="Stretch" 
                      Foreground="{TemplateBinding Foreground}"/>
              </Border>
          </Grid>
      </ControlTemplate>
      

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 2016-04-09
        • 2014-07-22
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        相关资源
        最近更新 更多