#c# #wpf #xaml #richtextbox
#c# #wpf #xaml #richtextbox
Вопрос:
Я пытаюсь загрузить файл Rich Text Format (RTF) в WPF RichTextBox. Когда я выполняю загрузку, кажется, что файл загружается в RichTextBox, но полоса прокрутки отображается без видимого ползунка для прокрутки загрузки. На полосе прокрутки не отображается стрелка вниз, поэтому кажется, что нижняя часть полосы прокрутки находится ниже области отображения RichTextBox. Это не позволяет пользователю прокручивать вниз. Я полагаю, что у меня либо отсутствует свойство XAML для RichTextBox, либо что-то не так с тем, как я загружаю RTF-файл. Пожалуйста, помогите. Заранее спасибо.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.RowSpan="5"
Grid.Column="0" Grid.ColumnSpan="3"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<RichTextBox x:Name="LicenseRichTextBox" Margin="10"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
IsReadOnly="True" VerticalScrollBarVisibility="Visible">
</RichTextBox>
</StackPanel>
<StackPanel Grid.Row="6" Grid.Column="1" Grid.ColumnSpan="3" Margin="65,20,0,0" >
<Button x:Name="CloseButton" HorizontalAlignment="Left"
Width="90" Margin="-10,0,0,0"
Click="CloseButton_Click">
<StackPanel Orientation="Horizontal">
<Image Source="{StaticResource CloseButtonImageKey}"
Margin="5,0,0,0" Height="20" Width="20" />
<TextBlock Padding="5,0,0,0" VerticalAlignment="Center"><Run Text="Close"/></TextBlock>
</StackPanel>
</Button>
</StackPanel>
</Grid>
public void LoadRTF()
{
const string EULA_Dir = @"ResourcesEULAEUlA.RTF";
string currentDir = AppDomain.CurrentDomain.BaseDirectory;
string PathToEULA = currentDir EULA_Dir;
if (File.Exists(PathToEULA))
{
LicenseRichTextBox.Selection.Load(new FileStream(PathToEULA, FileMode.Open), DataFormats.Rtf);
}
else
{
MessageBox.Show("Unable to locate the following file " PathToEULA);
}
}
Комментарии:
1. Можете ли вы показать скриншот? Кроме того, щелкните в области форматированного текста и прокрутите с помощью клавиш направления или прокрутки мыши — это работает??
Ответ №1:
Дикое предположение — ваш RichTextBox
находится внутри StackPanel
. Панели стека не ограничивают своих дочерних элементов, вместо этого они имеют бесконечное внутреннее пространство и растут в соответствии со своим дочерним содержимым. Таким образом, ваше текстовое поле не ограничено, поэтому оно не считает нужным отображать полосу прокрутки.
На данный момент не перед средой разработки, поэтому я не могу подтвердить это, но попробуйте извлечь его из StackPanel
и посмотреть, что это даст.
Комментарии:
1. Похоже, вы попали прямо в цель. Да, это была проблема. Как только я извлек RichTextBox из <StackPanel>, полоса прокрутки начала работать должным образом и выглядеть корректно. Теперь RichTextBox выглядит и работает нормально. Я надеюсь запомнить это для будущих проблем. Миллион благодарностей.