2013-03-13 11 views
6

Piszę aplikację za pomocą WPF, WPF Application Framework i MahApps.Metro. Mam włączoną walidacji dla okna wprowadzania danych tak:Czerwona ramka pozostaje w ramce TextBox nawet po wprowadzeniu danych.

<controls:MetroWindow x:Class="FinancePlus.Presentations.Views.CustomerView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="526" 
      xmlns:controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
      xmlns:presentation="clr-namespace:System.Waf.Presentation;assembly=WpfApplicationFramework" 
      presentation:ValidationHelper.IsEnabled="true" presentation:ValidationHelper.IsValid="{Binding IsValid, Mode=OneWayToSource}" 
      Title="Customer Editor"> 
    <Window.Resources> 
     <ResourceDictionary>    
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Green.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 


     </ResourceDictionary> 


    </Window.Resources> 
    <Grid DataContext="{Binding Customer}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Grid.Resources> 
      <Style TargetType="GroupBox"> 
       <Setter Property="Margin" Value="10,5"></Setter> 
      </Style> 
     </Grid.Resources> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <DockPanel Grid.Column="0"> 
      <GroupBox Header="Personal Information" DockPanel.Dock="Top"> 
       <Grid HorizontalAlignment="Stretch" VerticalAlignment="Top"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
        </Grid.RowDefinitions> 
        <Label Content="Title:" Grid.Column="0" Grid.Row="0" Margin="3" VerticalAlignment="Center" /> 
        <TextBox Grid.Column="1" Grid.Row="0" Height="23" Margin="3" Name="titleTextBox" 
          Text="{Binding Path=Title, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, ValidatesOnDataErrors=True}" 
          VerticalAlignment="Center" MinWidth="120" /> 
        <Label Content="Full Name:" Grid.Column="0" Grid.Row="1" Margin="3" VerticalAlignment="Center" /> 
        <TextBox Grid.Column="1" Grid.Row="1" Height="23" Margin="3" Name="fullNameTextBox" 
          Text="{Binding Path=FullName, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, ValidatesOnDataErrors=True}" 
          VerticalAlignment="Center" MinWidth="120" /> 
        <Label Content="Name With Initials:" Grid.Column="0" Grid.Row="2" Margin="3" VerticalAlignment="Center" /> 
        <TextBox Grid.Column="1" Grid.Row="2" Height="23" Margin="4" Name="nameWithInitialsTextBox" 
          Text="{Binding Path=NameWithInitials, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, ValidatesOnDataErrors=True}" 
          VerticalAlignment="Center" MinWidth="120" /> 
        <Label Content="Civil Status:" Grid.Column="0" Grid.Row="3" Margin="3" VerticalAlignment="Center" /> 
        <ComboBox DisplayMemberPath="CivilStatus" Grid.Column="1" Grid.Row="3" Height="23" 
         ItemsSource="{Binding}" Margin="3" Name="civilStatusComboBox" VerticalAlignment="Center" MinWidth="120" HorizontalAlignment="Stretch"> 
         <ComboBox.ItemsPanel> 
          <ItemsPanelTemplate> 
           <VirtualizingStackPanel /> 
          </ItemsPanelTemplate> 
         </ComboBox.ItemsPanel> 
        </ComboBox> 
        <Label Content="Date Of Birth:" Grid.Column="0" Grid.Row="4" Margin="3" VerticalAlignment="Center" /> 
        <DatePicker Grid.Column="1" Grid.Row="4" Height="25" Margin="3" Name="dateOfBirthDatePicker" HorizontalAlignment="Right" 
         SelectedDate="{Binding Path=DateOfBirth, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="115" />      
        <Label Content="Id Number:" Grid.Column="0" Grid.Row="5" Margin="3" VerticalAlignment="Center" /> 
        <TextBox Grid.Column="1" Grid.Row="5" Height="23" Margin="3" Name="idNumberTextBox" 
          Text="{Binding Path=IdNumber, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, ValidatesOnDataErrors=True}" 
          VerticalAlignment="Center" MinWidth="120" />      
        <Label Content="Profession:" Grid.Column="0" Grid.Row="6" Margin="3" VerticalAlignment="Center" /> 
        <TextBox Grid.Column="1" Grid.Row="6" Height="23" Margin="3" Name="professionTextBox" 
          Text="{Binding Path=Profession, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, ValidatesOnDataErrors=True}" 
          VerticalAlignment="Center" MinWidth="120" />      
       </Grid> 
      </GroupBox> 

..... More code. 

Wynik wygląda tak:

enter image description here

który wygląda ładnie. Problem jest nawet wtedy, gdy wprowadzę prawidłowe wartości dla TextBox, gdy pozostanie czerwona ramka. Jak widać w tytule i pełnej nazwie, tutaj: TextBox. Jak usunąć tę czerwoną granicę pozostałości? Skąd się bierze?

enter image description here

+0

W jaki sposób jest wdrażany Twój wizualizer? Zwłaszcza właściwości (Tytuł, FullName). – Jehof

+0

Czy rozwiązałeś ten problem? Mam podobny problem. Czy mógłbyś pokazać, w jaki sposób implementujesz sprawdzanie błędów? – MoonKnight

+0

Znalazłem również ten problem, nie mam pojęcia, jak to naprawić. Pojawia się również nagle, wydaje się, że nie ma to nic wspólnego z powiadomieniem o zmianie właściwości. Natomiast właściwości dołączone do sprawdzania poprawności i sprawdzania poprawności.Errors załączone wskazują, że nie ma błędów w formancie. To jak kod, który umieścił tych adoratorów w warstwie, bez ich usuwania. –

Odpowiedz

0

Natknąłem tego wcześniej, kiedy to się stało do mnie musiałem przeprowadzić zmianę danych podczas initialize i ContentRendered. Ponieważ miałem rzeczy naprawdę związane.

Inną rzeczą, którą widziałem przed chwilą w Stack Overflow, była kwestia, która wydarzyła się tutaj, co również spowodowało coś podobnego.

<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> 

To było moje spotkanie, jeśli to nie pomoże, spróbuję odtworzyć problem i naprawić. Sprawdź, czy mogę ci trochę pomóc, a następnie opisać, jak to naprawiłem. Ale mam nadzieję, że jedna z tych dwóch sugestii ci pomoże.

Po prostu daj mi znać, mam nadzieję, że to pomoże.

+0

Czy udało Ci się znaleźć sposób, aby temu zapobiec, aktualizując dane widoku podczas Oninitialize? –

Powiązane problemy