我正在实施键盘培训师。为了支付键,我使用TexBlock(其他元素不适合执行任务)。如何将枚举System.Windows.Input.Key的值绑定到此TexBlock的标签上?
答案 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>
此示例如下所示: