Проблема с проверкой WPF (IDataErrorInfo) и фокусировкой вкладки

У меня есть a TextBox связанный со свойством объекта, который реализует IDataErrorInfo. Я настроил Validation.ErrorTemplate из TextBox, и это хорошо работает. Проблема состоит в том, что у меня есть они на a TabControl, и шаблон проверки больше не отображается, если я изменяю вкладку на другой и затем возвращаюсь к начальной вкладке (где TextBox ). Похоже, что это проверено (как значение, корректно), но на самом деле это не.

Это IDataErrorInfo объект - отмечает, что "корректное" значение является строкой с длиной 2:

public class Presenter : IDataErrorInfo
{
    public Presenter()
    {
        this.Property = String.Empty;
    }

    public string Property { get; set; }

    public string Error { get { return null; } }

    public string this[string columnName]
    {
        get
        {
             if (columnName == "Property")
             {
                if (this.Property.Length == 2)
                   return null;
                else
                   return "Invalid property length!";
             }
             else return null;
        }
    }
}

и это - XAML:

<TabControl >
    <TabItem Header="tabItem1" Name="tabItem1" GotFocus="tabItem1_GotFocus">
        <Grid>
            <TextBox Width="100" Height="20" x:Name="txtField">
                <TextBox.Style>
                    <Style TargetType="{x:Type TextBox}">
                        <Setter Property="Validation.ErrorTemplate">
                            <Setter.Value>
                            <ControlTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="16"/>
                                    </Grid.ColumnDefinitions>
                                    <AdornedElementPlaceholder Grid.Column="0"/>
                                    <Image Source="bullets16.png" Grid.Column="1" ToolTip="{Binding CurrentItem.ErrorContent, Mode=OneWay}">
                                    </Image>
                                </Grid>
                            </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </TextBox.Style>
                <TextBox.Text>
                    <Binding Path="Property" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
                    </Binding>
                </TextBox.Text>
            </TextBox>
        </Grid>
    </TabItem>
    <TabItem Header="tabItem2" Name="tabItem2" >
        <Grid />
    </TabItem>
</TabControl>

Какие-либо идеи о том, что я делаю неправильно?

12
задан akjoshi 11 June 2012 в 11:41
поделиться

1 ответ

Элементы вкладок имеют тенденцию портиться с украшениями (хотя я не знаю почему, я испытал это).

Я мог бы воспроизвести вашу проблему.

Решите эту проблему, заключив содержимое TabItem в AdornerDecorator.

Итак:

<TabControl >
    <TabItem Header="tabItem1" Name="tabItem1" GotFocus="tabItem1_GotFocus">

        <AdornerDecorator>

           <Grid>
           ....
           </Grid>

        </AdornerDecorator>

    </TabItem>
    ...
</TabControl>
30
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: