选择WPF控件
我需要为用户提供更改NLog规则日志记录级别的选项 有12条规则,每一条都有自己的日志记录级别选择WPF控件,wpf,wpf-controls,Wpf,Wpf Controls,我需要为用户提供更改NLog规则日志记录级别的选项 有12条规则,每一条都有自己的日志记录级别 您可以推荐使用哪些控件在WPF中提供此选项?我不熟悉NLog,但我想如果您必须在少量预定义选项之间进行选择,那么组合框是最好的UI元素 您说过您有12个日志级别,因此在这种情况下,最好使用ItemsControl来实际显示这些项目,而不是自己创建所有UI元素: <Window x:Class="MiscSamples.LogLevelsSample" xmlns="http://
您可以推荐使用哪些控件在WPF中提供此选项?我不熟悉NLog,但我想如果您必须在少量预定义选项之间进行选择,那么组合框是最好的UI元素 您说过您有12个日志级别,因此在这种情况下,最好使用
ItemsControl
来实际显示这些项目,而不是自己创建所有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 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();
}
}
结果:
注意事项:
- 我看到你有几个WPF问题没有回答,你看起来很沮丧。别担心。这是一个很好的框架。我创建这个例子是希望你能看到它真正的美。如果没有更多的代码和努力,您不可能在winforms中实现相同的示例
- 看看这段代码到底有多简单和漂亮。我正在广泛使用WPF的数据绑定功能,这使一切变得更加简单
- 注意,没有一行代码引用或操纵任何UI元素。我所做的只是创建适当的数据结构,然后创建适当的UI来显示/操作它
- 数据和UI之间的“粘合剂”是
属性,这是所有XAML绑定都要解决的问题DataContext
- 如果你来自winforms或其他传统背景,你真的需要忘记你从中知道的一切,拥抱它(点击链接,它不是维基百科)
- 同样,我不熟悉NLog,所以我不确定我创建的数据结构是否符合您的需要。无论如何让我知道
- 如果你需要进一步的帮助,请告诉我。我很乐意帮助您在WPF中迈出第一步
ItemsControl
来实际显示这些项目,而不是自己创建所有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 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();
}
}
结果:
注意事项:
- 我看到你有几个WPF问题没有回答,你看起来很沮丧。别担心。这是一个很好的框架。我创建这个例子是希望你能看到它真正的美。如果没有更多的代码和努力,您不可能在winforms中实现相同的示例
- 看看这段代码到底有多简单和漂亮。我正在广泛使用WPF的数据绑定功能,这使一切变得更加简单
- 注意,没有一行代码引用或操纵任何UI元素。我所做的只是创建适当的数据结构,然后创建适当的UI来显示/操作它
- 数据和UI之间的“粘合剂”是
属性,这是所有XAML绑定都要解决的问题DataContext
- 如果你来自winforms或其他传统背景,你真的需要忘记你从中知道的一切,拥抱它(点击链接,它不是维基百科)
- 同样,我不熟悉NLog,所以我不确定我创建的数据结构是否符合您的需要。无论如何让我知道
- 如果你需要进一步的帮助,请告诉我。我很乐意帮助您在WPF中迈出第一步