C# RichTextBox WPF的滚动条
我创建了一个固定宽度和高度(A4大小)的RichTextBox。我想在数据超出高度时垂直滚动文本。通过将VerticalScrollBarVisibility属性设置为Hidden,我可以通过鼠标滚轮实现垂直滚动。在这之前,一切正常 如果我将VerticalScrollBarVisibility属性更改为“Visible”,它将显示附加到RichTextBox的垂直滚动条。因为我使用的是RichtextBox的固定宽度,所以滚动条不会出现在窗口的右侧。但是,我希望在窗口的右侧有一个单独的滚动条(就像每个浏览器一样)。我在窗口中添加了一个单独的垂直滚动条。现在的问题是,如何将Scrollbar事件链接到RichTextBox scrollingC# RichTextBox WPF的滚动条,c#,wpf,scrollbar,wpf-controls,C#,Wpf,Scrollbar,Wpf Controls,我创建了一个固定宽度和高度(A4大小)的RichTextBox。我想在数据超出高度时垂直滚动文本。通过将VerticalScrollBarVisibility属性设置为Hidden,我可以通过鼠标滚轮实现垂直滚动。在这之前,一切正常 如果我将VerticalScrollBarVisibility属性更改为“Visible”,它将显示附加到RichTextBox的垂直滚动条。因为我使用的是RichtextBox的固定宽度,所以滚动条不会出现在窗口的右侧。但是,我希望在窗口的右侧有一个单独的滚动条(
<Style x:Key="RichTxtStyle" TargetType="{x:Type RichTextBox}">
<Setter Property="VerticalScrollBarVisibility" Value="Hidden"/>
<Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="AcceptsReturn" Value="True"/>
<Setter Property="Margin" Value="40,0,40,0"/>
<Setter Property="Padding" Value="50,50,50,50"/>
<Setter Property="Width" Value="827"/>
<Setter Property="MinHeight" Value="1169"/>
<Setter Property="BorderThickness" Value="0"/>
</Style>
这是滚动条对象
<ScrollBar x:Name="VerticalScroll" Grid.Row="1" Grid.Column="1" Orientation="Vertical" ValueChanged="VerticalScroll_ValueChanged"/>
下面是我尝试过的事件。这就是我完全迷路的地方
private void VerticalScroll_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
double offset = e.NewValue;
RichTxtBx.ScrollToVerticalOffset(offset);
}
private void VerticalScroll\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
双偏移=e.NewValue;
RichTxtBx.ScrollToVerticalOffset(偏移量);
}
我认为这段代码很有用
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<RichTextBox Style="{StaticResource RichTxtStyle}">
</RichTextBox>
</ScrollViewer>
如果我错了,请纠正我,但是@meysam asadi的方法是通过
滚动查看器
包装RichTextBox
。有时,由于性能下降,这是不需要的。相反,您只需使用:
然后您可以使用“rtbMain”的方法ScrollToEnd()
,ScrollToVerticalOffset(双偏移量)
等等
要捕获ScollChanged事件,请使用如下方式使用ScrollViewer.ScrollChanged=“rtbMain\u ScrollChanged”:
代码隐藏:
使用System.Windows;
使用System.Windows.Controls;
命名空间堆栈VoerFlow_65766040
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有void rtbMain_ScrollChanged(对象发送方,ScrollChangedEventArgs e)
{
}
}
}
如果您还想从代码隐藏中的
RichTextBox
分配ScrollViewer
的事件,您应该简要查看以下内容:。谢谢您的帮助。这里的问题如前所述,ScrollViewer出现在richtextbox的右边缘。ReXTrimeBox在窗口中间。窗口的边缘在屏幕的边缘。我不希望滚动条出现在richtextbox的边缘,而是出现在窗口边缘,而不将richtextbox扩展到窗口边缘。感谢您的回复。此方法的问题是RichTextBox正在丢失其height属性。我不知道为什么。另外,我不希望滚动条位于richtextbox的边缘,而是位于窗口的边缘,而不将richtextbox延伸到wondow的边缘。