Wpf 在屏幕上放置我自己的键盘按钮 我想要什么?
我想使用WPF和MVVM创建自己的简单屏幕键盘。Wpf 在屏幕上放置我自己的键盘按钮 我想要什么?,wpf,xaml,Wpf,Xaml,我想使用WPF和MVVM创建自己的简单屏幕键盘。 我想把按钮放在这里: | q | w | e | r | t | y | u | i | o | p | | a | s | d | f | g | h | j | k | l | | z | x | c | v | b | n | m | 注:第一行包含10个按钮,第二行包含8个按钮,第三行包含7个按钮 视图模型 在视图模型中,我创建了以下键盘符号的列表,我将在视图中绑定这些符号 class ViewMode
我想把按钮放在这里:
| q | w | e | r | t | y | u | i | o | p |
| a | s | d | f | g | h | j | k | l |
| z | x | c | v | b | n | m |
注:第一行包含10个按钮,第二行包含8个按钮,第三行包含7个按钮
视图模型
在视图模型中,我创建了以下键盘符号的列表
,我将在视图中绑定这些符号
class ViewModel
{
// ...
public List<char> EnglishKeyboard { get; set; } = "qwertyuiopasdfghjklzxcvbnm".ToList();
// ...
}
问题:
我怎样才能像以前那样显示我的按钮?在
ItemsControl
的ItemsPanelTemplate
中应该使用哪个面板 正如@GregaMohorko所说,我应该使用表示字符行列表的List
视图模型
类视图模型
{
// ...
公共视图模型()
{
EnglishKeyboard=新列表()
{
//键盘线。
“qwertyuiop”.ToList(),
“asdfghjkl”.ToList(),
“zxcvbnm”.ToList()
};
}
公共列表EnglishKeyboard{get;set;}
// ...
}
看法
谢谢我认为您需要自己实现这一点,没有这样的默认面板。我会使用网格、行定义和列定义来实现。列定义的正确宽度可以解决此问题。但您可能需要指定哪行上有哪些字符<代码>列表不够。至少需要
List
,表示字符行列表。视图模型和项控件在这种情况下只会使问题复杂化。xaml中定义的26个按钮应该更简单
<ItemsControl ItemsSource="{Binding EnglishKeyboard}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<!-- Which panel should I use here? -->
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button FontFamily="Arial"
FontSize="24"
Content="{Binding}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
class ViewModel
{
// ...
public ViewModel()
{
EnglishKeyboard = new List<List<char>>()
{
// Keyboard lines.
"qwertyuiop".ToList(),
"asdfghjkl".ToList(),
"zxcvbnm".ToList()
};
}
public List<char> EnglishKeyboard { get; set; }
// ...
}
<ItemsControl ItemsSource="{Binding EnglishKeyboard}">
<!-- Show keyboard lines in the StackPanel -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding}">
<!-- Keyboard line -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button FontFamily="Arial"
FontSize="24"
Content="{Binding}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>