我该如何创建十六进制键盘?

时间:2014-03-20 19:58:57

标签: silverlight xaml windows-phone-8 windows-phone

我正在使用XAML编写Windows Phone 8应用程序。我需要允许用户以二进制,十六进制,八进制,十进制和ASCII格式输入数据。我想向用户呈现与其输入选择相匹配的键盘。 Here是Windows Phone Calculator的屏幕截图,显示了类似的输入选择以及我希望在HEX模式下向用户呈现的内容的模型。

有没有办法可以创建自定义键盘布局?

我应该将ui自己构建为按钮并将按钮挂钩到按下的按键命令吗?

感谢您的任何建议。

IntStarFoo

2 个答案:

答案 0 :(得分:2)

无法使用WP8创建自定义键盘布局。虽然您可以控制通过InputScope TextBox选择的特定键盘,但控制权与所提供的一样多。

由于您需要完全自定义的UI,因此您需要自己打开按钮。通过为按钮创建自定义控件模板,您可以使它们看起来与您想要的计算器按钮类似。

使用新模板和一些样式,使按钮看起来相似是相当简单的。

Example buttons

<Style x:Key="CalculatorStyle" TargetType="Button">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/>
    <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid Background="#FF333333">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver"/>
                            <VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneButtonBasePressedForegroundBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" 
                        BorderThickness="{TemplateBinding BorderThickness}" 
                        Background="{TemplateBinding Background}" CornerRadius="0" Margin="0">
                        <ContentControl x:Name="ContentContainer" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Content="{TemplateBinding Content}" 
                            Foreground="{TemplateBinding Foreground}" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                            Padding="{TemplateBinding Padding}" 
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style x:Key="NumberStyle" TargetType="Button" BasedOn="{StaticResource CalculatorStyle}">
    <Setter Property="Background" Value="#FF232323"/>
</Style>

在上面的模板中,我将一些边框,颜色和边距调整为与示例按钮类似。

然后将它们用于 - 例如,您可以将它们放在Grid中。

<Button Style="{StaticResource CalculatorStyle}" Content="Mod" 
       Grid.Row="1" Grid.Column="2"/>
<Button Style="{StaticResource NumberStyle}" Content="7" 
       Grid.Column="3"/>

答案 1 :(得分:1)

您可以找到here at MSDN的可用键盘范围 - 您无法更改它们。

因此,在您的情况下,您将需要构建自己的控件模仿键盘,您可以阅读the article on this blog关于创建自己的键盘。也许它会有所帮助。