如何将枚举绑定到文本块

时间:2018-06-23 01:14:53

标签: wpf

我正在实施键盘培训师。为了支付键,我使用TexBlock(其他元素不适合执行任务)。如何将枚举System.Windows.Input.Key的值绑定到此TexBlock的标签上?

1 个答案:

答案 0 :(得分:0)

这是答案;随心所欲地获取所需的东西。

此示例中的一些内容将帮助您。我将包括整个MainWindow.xaml以供最后查看,但将对其进行分解并在此处进行说明。

首先,您需要在视图中引用适当的名称空间。

xmlns:WindowsInput="clr-namespace:System.Windows.Input;assembly=WindowsBase"
xmlns:System="clr-namespace:System;assembly=mscorlib"

然后创建一个ObjectDataProvider,用于调用类型等上的方法。您将在这里看到它的工作原理,但我建议您阅读更多信息,因为这并不是它的全部目的。然而;在此示例中,您将看到它引用了我们要调用的方法名称和类型,并允许我们将参数也传递给方法。这让我们在xaml中完成所有工作,而不是在后面编写代码。对我来说更好。这个想法不仅是像您想的那样在这里,而是为了简单起见...

<ObjectDataProvider x:Key="GetKeyNames"
                    MethodName="GetNames"
                    ObjectType="{x:Type System:Enum}">
    <ObjectDataProvider.MethodParameters>
        <x:Type TypeName="WindowsInput:Key" />
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

最后,我将其绑定到ItemsSource。它将调用该方法并将值作为数据返回。

<ItemsControl ItemsSource="{Binding Source={StaticResource GetKeyNames}}">

这需要更多解释,但是鉴于此提示和下面的完整MainWindow.xaml,我相信您会明白这张图片并看到问题的答案。如果您需要更多说明,我会很乐意更新答案。

<Window x:Class="Question_Answer_WPF_App.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:WindowsInput="clr-namespace:System.Windows.Input;assembly=WindowsBase"
        xmlns:System="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="450"
        Width="800">

    <Window.Resources>
        <ObjectDataProvider x:Key="GetKeyNames"
                            MethodName="GetNames"
                            ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="WindowsInput:Key" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>

    <ScrollViewer>
        <ItemsControl ItemsSource="{Binding Source={StaticResource GetKeyNames}}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Border BorderBrush="Green"
                            BorderThickness="1"
                            Width="100"
                            Height="20">
                        <TextBlock Text="{Binding}"
                                   VerticalAlignment="Center"
                                   HorizontalAlignment="Center" />
                    </Border>

                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</Window>

此示例如下所示:

enter image description here