首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP C# WindowsIoT Keypad & Textblock绑定

UWP C# WindowsIoT Keypad & Textblock绑定
EN

Stack Overflow用户
提问于 2019-07-03 07:43:40
回答 1查看 40关注 0票数 0

我正在测试基于UWP示例PhoneCall的键盘和文本块绑定。

然而,当我在键盘上按下代码时,按下的键不会在textblock上打印。

我从示例代码中做了一些更改。我从样品中添加了ViewModels & Helpers。能告诉我哪里做错了吗?谢谢。

我的XAML代码如下;

代码语言:javascript
复制
<TextBlock x:Name="KeypadDisplay" FontSize="50" TextAlignment="Right"
                   Text="{Binding DialerPhoneNumber.NumberToDial, Mode=OneWay}" 
                   VerticalAlignment="Top" HorizontalAlignment="Left" Height="80" Width="300" Margin="70,20,0,0">
</TextBlock>

<Button Grid.Column="1" Grid.Row="1"
                    Command="{Binding ProcessDialPad}" Style="{StaticResource TextBlockButtonStyle}"
                    CommandParameter="1" Tag="1" HorizontalAlignment="Center" Height="30" Width="100">
                <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                    <TextBlock Text="1" FontSize="18" FontWeight="Bold" Style="{StaticResource BodyTextBlockStyle}"/>
                </StackPanel>
</Button>
<Button Grid.Column="2" Grid.Row="1"
                    Command="{Binding ProcessDialPad}" Style="{StaticResource TextBlockButtonStyle}"
                    CommandParameter="2" Tag="2" HorizontalAlignment="Center" Height="30" Width="100">
                <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                    <TextBlock Text="2" FontSize="18" FontWeight="Bold" Style="{StaticResource BodyTextBlockStyle}"/>
                </StackPanel>
</Button>
<Button Grid.Column="3" Grid.Row="1"
                    Command="{Binding ProcessDialPad}" Style="{StaticResource TextBlockButtonStyle}"
                    CommandParameter="3" Tag="3" HorizontalAlignment="Center" Height="30" Width="100">
                <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                    <TextBlock Text="3" FontSize="18" FontWeight="Bold" Style="{StaticResource BodyTextBlockStyle}"/>
                </StackPanel>
</Button>

更新-03-07-2019年processdialpad例程如下

代码语言:javascript
复制
public ICommand ProcessDialPad
    {
        get
        {
            if (dialPadCommand == null)
            {
                dialPadCommand = new RelayCommand(
                    this.DialPadInvoked);
            }
            return dialPadCommand;
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 02:39:58

我猜您错过了为页面设置用于绑定模型的DataContext。请检查是否在页面中添加以下代码。

代码语言:javascript
复制
DataContext = ViewModelDispatcher.DialerViewModel;

下面的代码对我很好。在这里,我在ViewModels和PhoneCall示例中使用了相同的代码。

MainPage.xaml

代码语言:javascript
复制
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <StackPanel Grid.Row="0" HorizontalAlignment="Stretch">
        <Border Background="BlueViolet">
            <TextBlock x:Name="KeypadDisplay" FontSize="50" TextAlignment="Right"  Foreground="White"
               Text="{Binding DialerPhoneNumber.NumberToDial, Mode=OneWay}" 
               VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="100">

            </TextBlock>
        </Border>

    </StackPanel>

    <StackPanel Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="600">
            <Grid.RowDefinitions>
                <RowDefinition Height="12" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="12" />
            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="12" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="12" />
            </Grid.ColumnDefinitions>

            <Button Grid.Column="1" Grid.Row="1"
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="1" Tag="1" Holding="OnDialPadHolding">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="1" Style="{StaticResource DialpadNumberStyle}"/>
                    <FontIcon FontFamily="Segoe MDL2 Assets" 
                      FontWeight="ExtraLight"
                      Glyph="&#xE77C;" 
                      RenderTransformOrigin="0.5,0.5" 
                      Height="14.8">
                        <FontIcon.RenderTransform>
                            <CompositeTransform ScaleX="1" ScaleY="1"/>
                        </FontIcon.RenderTransform>
                    </FontIcon>
                </StackPanel>
            </Button>
            <Button Grid.Column="2" Grid.Row="1" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="2">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="2" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="ABC" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="3" Grid.Row="1" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="3">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="3" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="DEF" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="1" Grid.Row="2" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="4">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="4" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="GHI" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="2" Grid.Row="2" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="5">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="5" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="JKL" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="3" Grid.Row="2" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="6">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="6" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="MNO" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="1" Grid.Row="3" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="7">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="7" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="PQRS" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="2" Grid.Row="3" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="8">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="8" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="TUV" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="3" Grid.Row="3" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="9">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="9" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="WXYZ" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="1" Grid.Row="4" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="*" Tag="," Holding="OnDialPadHolding">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="*" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="," Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="2" Grid.Row="4" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="0" Tag="+" Holding="OnDialPadHolding">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="0" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text="+" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>
            <Button Grid.Column="3" Grid.Row="4" 
            Command="{Binding ProcessDialPad}" Style="{StaticResource DialpadButtonStyle}"
            CommandParameter="#" Tag=";" Holding="OnDialPadHolding">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="#" Style="{StaticResource DialpadNumberStyle}"/>
                    <TextBlock Text=";" Style="{StaticResource DialpadLetterStyle}"/>
                </StackPanel>
            </Button>

        </Grid>
    </StackPanel>
</Grid>

MainPage.cs

代码语言:javascript
复制
    public MainPage()
    {
        this.InitializeComponent();

        DataContext = ViewModelDispatcher.DialerViewModel;
    }

    /// <summary>
    /// Processes press and hold for the buttons that supports press and hold. E.g
    /// 1 -> Voicemail
    /// 0 -> +
    /// * -> , (pause)
    /// # -> ; (wait)
    /// </summary>
    private void OnDialPadHolding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e)
    {
        Button button = (Button)sender;
        DialerViewModel vm = (DialerViewModel)DataContext;
        if ((vm != null) && (e.HoldingState == Windows.UI.Input.HoldingState.Started))
        {
            vm.ProcessDialPadHolding.Execute(button.Tag);
        }

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56865264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档