Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择WPF控件_Wpf_Wpf Controls - Fatal编程技术网

选择WPF控件

选择WPF控件,wpf,wpf-controls,Wpf,Wpf Controls,我需要为用户提供更改NLog规则日志记录级别的选项 有12条规则,每一条都有自己的日志记录级别 您可以推荐使用哪些控件在WPF中提供此选项?我不熟悉NLog,但我想如果您必须在少量预定义选项之间进行选择,那么组合框是最好的UI元素 您说过您有12个日志级别,因此在这种情况下,最好使用ItemsControl来实际显示这些项目,而不是自己创建所有UI元素: <Window x:Class="MiscSamples.LogLevelsSample" xmlns="http://

我需要为用户提供更改NLog规则日志记录级别的选项

有12条规则,每一条都有自己的日志记录级别


您可以推荐使用哪些控件在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之间的“粘合剂”是
    DataContext
    属性,这是所有XAML绑定都要解决的问题
  • 如果你来自winforms或其他传统背景,你真的需要忘记你从中知道的一切,拥抱它(点击链接,它不是维基百科)
  • 同样,我不熟悉NLog,所以我不确定我创建的数据结构是否符合您的需要。无论如何让我知道
  • 如果你需要进一步的帮助,请告诉我。我很乐意帮助您在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之间的“粘合剂”是
    DataContext
    属性,这是所有XAML绑定都要解决的问题
  • 如果你来自winforms或其他传统背景,你真的需要忘记你从中知道的一切,拥抱它(点击链接,它不是维基百科)
  • 同样,我不熟悉NLog,所以我不确定我创建的数据结构是否符合您的需要。无论如何让我知道
  • 如果你需要进一步的帮助,请告诉我。我很乐意帮助您在WPF中迈出第一步

这取决于您希望它看起来如何?什么是简单的数据网格?可能是组合框?但这完全取决于你想要怎样做。这样的决定取决于各种因素。要显示的条目有多复杂?谁是前端的用户(技术背景)?您的UI的其余部分是什么样子的?你有什么必须遵循的范例吗?当然,还应提供哪些功能顺便说一句,我认为最好把这篇文章移到我的边界上。我想这里没问题。我会说,很难说出你在问什么,因为听起来一个简单的组合框就足够了。你能详细说明为什么不是这样吗?这取决于你想让它看起来怎么样?什么是简单的数据网格?可能是组合框?但这完全取决于你想要怎样做。这样的决定取决于各种因素。要显示的条目有多复杂?谁是前端的用户(技术背景)?您的UI的其余部分是什么样子的?你有什么必须遵循的范例吗?当然,还应提供哪些功能顺便说一句,我认为最好把这篇文章移到我的边界上。我想这里没问题。我会说,很难说出你在问什么,因为听起来一个简单的组合框就足够了。你能解释一下为什么不是这样吗?