Как я избавляюсь от красного прямоугольника, когда мой wpf, который обязательная проверка привела к сбою и содержание панели, больше не видим?

личные члены не видны ни для каких других классов, даже для детей

Вы не можете переопределить частный метод, но опять же вы не можете его вызвать. Однако вы можете создать идентичный метод с тем же именем у ребенка.

public class A
{
    private int calculate() {return 1;}
    public void visibleMethod()
    {
        System.out.println(calculate());
    };
}

public class B extends A
{
    private int calculate() {return 2;}
    public void visibleMethod()
    {
        System.out.println(calculate());
    };
}

Если вы вызываете A.visibleMethod (), он печатает 1.

Если вы вызываете B.visibleMethod (), он печатает 2.

Если вы не реализуете частный метод вычисления () в B, он не будет компилироваться, потому что публичный метод, который его вызывает, не может видеть частный метод в A.

21
задан Sam Meldrum 26 November 2008 в 16:30
поделиться

2 ответа

Если я помню правильно, это - известная проблема. Мы повторно обработали текстовое поле по шаблону для включения следующего:

<Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
        <ControlTemplate>
            <ControlTemplate.Resources>
                <BooleanToVisibilityConverter x:Key="converter" />
        </ControlTemplate.Resources>
            <DockPanel LastChildFill="True">
                <Border 
                    BorderThickness="1"
                    BorderBrush="Red"
                    Visibility="{Binding ElementName=placeholder, Mode=OneWay, Path=AdornedElement.IsVisible, Converter={StaticResource converter}}">
                    <AdornedElementPlaceholder x:Name="placeholder" />
                </Border>
             </DockPanel>
         </ControlTemplate>
    </Setter.Value>
</Setter>
23
ответ дан 29 November 2019 в 21:44
поделиться

У меня есть решение проблемы самого, которая должна изменить мое событие нажатия кнопки, которое изменяет видимость панелей. Это изменилось бы на что-то вроде этого:

private void Button_Click(object sender, RoutedEventArgs e) {
    if (panel1.Visibility == Visibility.Collapsed) {
        panel1.Visibility = Visibility.Visible;
        DataBoundTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
        panel2.Visibility = Visibility.Collapsed;
    }
    else {
        panel1.Visibility = Visibility.Collapsed;
        DataBoundTextBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
        panel2.Visibility = Visibility.Visible;
    }
}

UpdateSource () и UpdateTarget () имеют эффект повторного применения и удаления красного прямоугольника, но это походит на ужасный взлом. Конечно, wpf платформа должна скрывать красный прямоугольник для меня, когда содержание панели сворачивается. Любая более чистая фиксация, которая не требует, чтобы я играл с выражением привязки, получает мой голос.

Спасибо,

Sam

1
ответ дан 29 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

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