questões de parada AdornerDecorator e tabulação

votos
3

Eu estou usando IDataErrorInfo para validar e indicar erros em minhas caixas de texto. Eu estou achando que eu tenho que guia uma vez para a caixa de texto e uma vez para o adornerdecorator.

Eu tenho um modelo de erro:

<ControlTemplate x:Key=ErrorTemplate>
        <StackPanel KeyboardNavigation.IsTabStop=False >
        <Border KeyboardNavigation.IsTabStop=False  BorderBrush=Red BorderThickness=1 Padding=2 CornerRadius=2>
            <AdornedElementPlaceholder KeyboardNavigation.IsTabStop=False />
        </Border>
        </StackPanel>                
    </ControlTemplate>

um modelo de caixa de texto:

<Style x:Key=TextBoxInError TargetType={x:Type TextBox}>
        <Setter Property=KeyboardNavigation.TabNavigation Value=None/>
        <Setter Property=FocusVisualStyle Value={x:Null}/>
        <Setter Property=Margin Value=0,5,0,5/>
        <Setter Property=AllowDrop Value=true/>
        <Setter Property=HorizontalContentAlignment Value=left/>
        <Setter Property=Template>
            <Setter.Value>
                <ControlTemplate TargetType={x:Type TextBox}>
                    <Grid  KeyboardNavigation.IsTabStop=False >
                        <Border  KeyboardNavigation.IsTabStop=False x:Name=Border Background={DynamicResource WindowBackgroundBrush} BorderBrush={DynamicResource SolidBorderBrush} BorderThickness=1 Padding=2 CornerRadius=2>
                            <ScrollViewer IsTabStop=False Margin=0 x:Name=PART_ContentHost Style={DynamicResource SimpleScrollViewer} Background={TemplateBinding Background}/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property=Validation.HasError Value=true>
                            <Setter Property=ToolTip Value={Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors), Converter={StaticResource errorConverter}}/>
                        </Trigger>
                        <Trigger Property=IsEnabled Value=false>
                            <Setter Property=Foreground Value=Gray/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

e declarar uma caixa de texto como este:

<AdornerDecorator  KeyboardNavigation.IsTabStop=False >
<TextBox Margin=5,5,5,3 x:Name=txtName IsEnabled={Binding EditMode} Validation.ErrorTemplate={StaticResource ErrorTemplate}
 Text={Binding ApplicationName, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True} 
 Height=25 MaxLength=50 MaxLines=1 Style={StaticResource TextBoxInError}/>
 </AdornerDecorator>

Se o adorno é redonda uma caixa de texto como acima então eu separador uma vez para deixar a caixa de texto e uma vez para deixar o 'adorno' (parece) Se eu tiver o adorno em torno de um StackPanel de caixas de texto, em seguida, guia I uma vez cada um para o texto caixas, em seguida, ter que voltar através de todos os 'adornos' em volta. Quando tabulações através dos adornos o foco vai para a borda vermelha definido no modelo de controle ..

alguma ideia?

obrigado

Publicado 10/12/2008 em 01:20
fonte usuário
Em outras línguas...                            


1 respostas

votos
6

Adicione isto a seção de recursos da janela:

<Style TargetType="{x:Type Control}">
    <Setter Property="Focusable" Value="False"/>
</Style>

Para mais informações olhada no meu blog: http://www.nbdtech.com/blog/archive/2008/05/25/WPF-Problems-with-Keyboard-Focus-When-Using-Validation.aspx

Respondeu 10/12/2008 em 09:39
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more