WPFMVVM Set Control Focused - PullRequest
       7

WPFMVVM Set Control Focused

1 голос
/ 21 апреля 2009

Как в MVVM вы устанавливаете фокус управления пользователем? Использование Focusmanager.FocusElement = {Binding ...} Не влияет.

Вот мой XAML:

<DataTemplate DataType="{x:Type client:TelephoneNumberViewModel}">
    <Grid FocusManager.FocusedElement="{Binding ElementName=TelephoneNumber}" Width="1024" Height="540">
        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="80" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="25" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <TextBlock Margin="0 25 0 0" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="1" 
             Grid.ColumnSpan="7"  Name="textBlockQuestion"
             TextWrapping="Wrap" Style="{DynamicResource TitleTextBlock}">"What is your telephone number?"</TextBlock>

        <Grid Grid.Column="1" Grid.Row="1" Grid.RowSpan="7" 
             Grid.ColumnSpan="7" Height="460">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="170" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="80" />
                <RowDefinition Height="80" />
                <RowDefinition Height="80" />
                <RowDefinition Height="80" />
                <RowDefinition Height="100" />
            </Grid.RowDefinitions>

            <StackPanel Grid.Row="0" Grid.RowSpan="5" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Top" HorizontalAlignment="Left">
                <wpfclient:TelephoneBox Name="TelephoneNumber"  TelephoneNumber="{Binding PhoneNumber, Mode=TwoWay}" />
                <!--<TextBox Width="500" VerticalAlignment="Top" HorizontalAlignment="Left" FontSize="40" TextAlignment="Center" Text="{Binding PhoneNumber}"></TextBox>-->

                <StackPanel Orientation="Horizontal" Margin="0 40 0 0">
                    <StackPanel Orientation="Vertical" Margin="0 0 60 0" >
                        <Button Margin="0 0 0 20" Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyMobileCommand}">Mobile</Button>
                        <Button Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyHomeCommand}">Home</Button>

                    </StackPanel>
                    <StackPanel Orientation="Vertical">
                        <Button Margin="0 0 0 20"  Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyWorkCommand}">Work</Button>
                        <Button Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyOtherCommand}">Other</Button>
                    </StackPanel>
                </StackPanel>



            </StackPanel>


        </Grid>



        <Grid Width="1024" Height="80" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="8" VerticalAlignment="Bottom">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Button Margin="60 0 0 20" Grid.Column="0" Grid.Row="0"  Name="buttonContinue" 
                    Command="{Binding SurveySkipCommand}" Style="{DynamicResource LargeGlossyButtonStyle}" 
                    >Skip</Button>
        </Grid>



    </Grid>
</DataTemplate>

Пользовательский элемент управления не получает фокус, пока я не нажму еще раз.

Ответы [ 2 ]

1 голос
/ 21 апреля 2009

Использование FocusManager.FocusedElement.

Редактировать после вашего редактирования : Я не думаю, что это можно сказать, не видя весь ваш код, но я думаю, что это может быть проблемой, требующей фокусировки. Вы устанавливаете логический фокус на телефонный контроль, но он будет фокусироваться только на клавиатуре, если этот логический контекст является активным. Я подозреваю, что что-то вне настраиваемого элемента управления имеет свою собственную область фокусировки, и только когда вы нажмете вкладку, область будет перемещена в UserControl.

0 голосов
/ 21 апреля 2009

Каков контекст фокуса? Они вкладываются в элемент управления, получает ли элемент управления фокус при добавлении нового элемента?

Если последнее, убедитесь, что ListBox, для которого используется DataTemplate, имеет IsSynchronizedWithCurrentItem = "True"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...