Хорошо, как я связываюсь?
Это может сработать, но это не лучшая практика. Лучшая практика - использовать фактическую привязку данных. Во-первых, вам нужно заменить вашу StackPanel чем-то, что можно привязать к списку. ItemsControl
- это вещь, наиболее близкая к простой StackPanel, другие варианты, например, ListBox.
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl Name="errorMessageList" />
</ScrollViewer>
private void LoadData()
{
IErrorLogReader errorLogReader = new ErrorLogReader();
var errors = errorLogReader.RetrieveErrors();
errorMessageList.ItemsSource = errors;
}
Чтобы указать , как вы хотите отображать сообщения об ошибках, вы можете установить шаблон для ItemsControl:
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl Name="errorMessageList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox IsReadOnly="true" ... Text="{Binding ErrorMessage}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
Полоса прокрутки отключена
Вы вкладываете ScrollViewer в StackPanel ... это не сработает: StackPanel занимает столько места по вертикали, сколько ему нужно, поэтому ScrollViewer будет всегда иметь достаточно места и никогда не будет отображать прокрутку бар. Вам необходимо заменить StackPanel верхнего уровня на что-то, занимающее столько места, сколько доступно ; DockPanel, например:
<DockPanel Name="mainContainer">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Name="Menu">
<Button Name="Refresh">Refresh</Button>
</StackPanel>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Name="errorMessagePlaceHolder"></StackPanel>
</ScrollViewer>
</StackPanel>
Плохо ли мне делать эффект наведения мыши?
Это можно сделать с помощью стиля и триггера. Определите следующий стиль:
<Window ...>
<Window.Resources>
<Style x:Key="hoverTextBox" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="AntiqueWhite" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
...
</Window>
и назначьте его вашему TextBox внутри DataTemplate:
<TextBox IsReadOnly="true" ... Text="{Binding ErrorMessage}"
Style="{StaticResource hoverTextBox}" />