我需要为用户提供更改 NLog 规则的日志记录级别的选项。
有 12 条规则,每条规则都有自己的日志记录级别。
您可以推荐使用哪些控件来在 WPF 中提供此选项?
我需要为用户提供更改 NLog 规则的日志记录级别的选项。
有 12 条规则,每条规则都有自己的日志记录级别。
您可以推荐使用哪些控件来在 WPF 中提供此选项?
我不熟悉 NLog,但我想如果你必须在少量预先确定的选项之间进行选择,那么 aComboBox
是最好的 UI 元素。
ItemsControl
你说你有 12 个日志级别,所以在这种情况下,使用 an来实际显示这些项目而不是自己创建所有 UI 元素是最有意义的:
<Window x:Class="MiscSamples.LogLevelsSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LogLevels" Height="300" Width="300">
<ItemsControl ItemsSource="{Binding LogRules}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Margin="2" Text="{Binding Name}"/>
<ComboBox ItemsSource="{Binding DataContext.LogLevels, RelativeSource={RelativeSource AncestorType=Window}}"
SelectedItem="{Binding LogLevel}" Width="100" Margin="2"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
代码背后:
public partial class LogLevelsSample : Window
{
public LogLevelsSample()
{
InitializeComponent();
DataContext = new LogSettingsViewModel();
}
}
视图模型:
public class LogSettingsViewModel
{
public List<LogLevels> LogLevels { get; set; }
public List<LogRule> LogRules { get; set; }
public LogSettingsViewModel()
{
LogLevels = Enum.GetValues(typeof (LogLevels)).OfType<LogLevels>().ToList();
LogRules = Enumerable.Range(1, 12).Select(x => new LogRule()
{
Name = "Log Rule " + x.ToString(),
LogLevel = MiscSamples.LogLevels.Debug
}).ToList();
}
}
数据项:
public class LogRule
{
public string Name { get; set; }
public LogLevels LogLevel { get; set; }
}
public enum LogLevels
{
Trace,
Debug,
Warn,
Info,
Error,
Fatal
}
结果:
注意事项:
DataContext
是属性,它是所有 XAML 绑定所针对的解析对象。