我正在使用XAML编写Windows Phone 8应用程序。我需要允许用户以二进制,十六进制,八进制,十进制和ASCII格式输入数据。我想向用户呈现与其输入选择相匹配的键盘。 Here是Windows Phone Calculator的屏幕截图,显示了类似的输入选择以及我希望在HEX模式下向用户呈现的内容的模型。
有没有办法可以创建自定义键盘布局?
我应该将ui自己构建为按钮并将按钮挂钩到按下的按键命令吗?
感谢您的任何建议。
答案 0 :(得分:2)
无法使用WP8创建自定义键盘布局。虽然您可以控制通过InputScope
TextBox
选择的特定键盘,但控制权与所提供的一样多。
由于您需要完全自定义的UI,因此您需要自己打开按钮。通过为按钮创建自定义控件模板,您可以使它们看起来与您想要的计算器按钮类似。
使用新模板和一些样式,使按钮看起来相似是相当简单的。
<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关于创建自己的键盘。也许它会有所帮助。