我正在學習WPF,並試圖遵循某種最佳實踐。我現在有點迷路,需要一些指導。基本的WPF佈局問題
我正在創建一個非常簡單的應用程序,它讀取文本文件(錯誤日誌)並將其分成單獨的錯誤消息。我想將這些消息(存儲在模型對象中)顯示爲消息列表。由於列表可以包含很多項目,我希望窗口可以調整大小,所以我需要一個垂直滾動條,但我希望內容包裹(即不需要水平滾動條)。
<Window x:Class="ErrorLog.UI.WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="800" Width="1200" Loaded="Window_Loaded">
<StackPanel Name="mainContainer">
<StackPanel Orientation="Horizontal" Name="Menu">
<Button Name="Refresh">Refresh</Button>
</StackPanel>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Name="errorMessagePlaceHolder"></StackPanel>
</ScrollViewer>
</StackPanel>
我此刻閱讀的代碼的文件後面添加到StackPanel的是一堆取值爲錯誤消息文本框。我還添加了一些鼠標懸停效果是這樣的:
private void LoadData()
{
IErrorLogReader errorLogReader = new ErrorLogReader();
var errors = errorLogReader.RetrieveErrors();
if (errors.Count == 0)
{
TextBox noErrors = new TextBox();
noErrors.Text = "No errors found";
errorMessagePlaceHolder.Children.Add(noErrors);
}
else
{
for (var i = errors.Count - 1; i > 0; i--)
{
TextBox errorMessage = new TextBox();
errorMessage.IsReadOnly = true;
errorMessage.Padding = new Thickness(10);
errorMessage.Text = errors[i].ErrorMessage;
errorMessage.TextWrapping = TextWrapping.Wrap;
errorMessage.MouseEnter += ErrorMessageMouseEnter;
errorMessage.MouseLeave += ErrorMessageMouseLeave;
errorMessagePlaceHolder.Children.Add(errorMessage);
}
}
}
protected void ErrorMessageMouseEnter(object sender, RoutedEventArgs e)
{
((TextBox) sender).Background = Brushes.AntiqueWhite;
}
protected void ErrorMessageMouseLeave(object sender, RoutedEventArgs e)
{
((TextBox) sender).Background = null;
}
所以第一件事情我想知道的是:
- 是我綁定確定的方式嗎?
- 滾動條即將被禁用
- 我在做mouseover效果的方式不好嗎?
乾杯。
感謝您的。幫助我堆積如山。 – 2010-12-01 03:56:58