Wpf 在屏幕上放置我自己的键盘按钮 我想要什么?

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

我想使用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 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>