我需要在wpf的多行文本框中显示一些内容,其中一些内容,我想显示粗体(或我想要做的任何格式化)。
所以我最终搜索了一个控件,发现RichTextBox可以通过在其中使用Run控件来完成这项工作。像这样:
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run Text="Text to be displayed in Bold" FontWeight="Bold"/>
<Run Text="Normal text"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
所以这很好,我可以在这里选择内容,它也有很好的格式。
但现在下一个问题是,这个内容是动态的,我将在viewModel中创建。所以我尝试使用ItemsControl Inside RichTextBox,如下所示:
<RichTextBox>
<FlowDocument>
<Paragraph>
<ItemsControl ItemsSource="{Binding MyCollections}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--< I want to use Run here, so that the content inside textbox is selectable, and I can even do formatting on Run >-->
<TextBlock Text="{Binding MyTextInCollection}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Paragraph>
</FlowDocument>
</RichTextBox>
但我不能在DataTemplate中使用Run(如代码中所示),所以我尝试使用TextBlock。
现在问题是,TextBox应该具有的基本选择行为,现在已经消失了。我想做选择(通过使用Ctrl A,或者单击并拖动鼠标)并且想要复制文本。我现在不能做。
任何帮助将不胜感激。
答案 0 :(得分:1)
我通过这种方式工作:
在xaml中使用RichTextBox为其命名
<RichTextBox x:Name="MyTextBox" IsReadOnly="True" VerticalScrollBarVisibility="Visible" Margin="5" />
然后在代码隐藏中,我使用paragraph和Run创建文档并将其绑定到RichTextBox,如下所示:
FlowDocument fd = new FlowDocument();
fd.LineHeight = 1;
foreach (var item in ((MyViewModel)this.DataContext).MyCollections)
{
Paragraph p = new Paragraph(new Run(item.MyTextInCollection) { FontWeight = FontWeights.Bold }); // bold text
Paragraph p = new Paragraph(new Run(item.MyTextInCollection)); // text with no formatting
fd.Blocks.Add(p);
}
MyTextBox.Document = fd;
这样我就可以获得内容的格式,以及我需要的选择行为。
我知道我在代码隐藏中而不是在xaml中这样做,但这很好,因为这是我在代码隐藏中所做的纯视图内容,而不是ViewModel中应该存在的业务逻辑
答案 1 :(得分:-1)
这里的标签onClick事件在这种情况下没有给出更喜欢Javascript
IJavaScriptExecutor jspop =(IJavaScriptExecutor)驱动程序;
IWebElement elementpop = driver.FindElement(By.XPath(&#34; html / body / div / ul / div&#34;));
jspop.ExecuteScript(&#34; arguments [0] .click()&#34;,elementpop);