2013-03-13 104 views
6

WPF、WPF Application FrameworkおよびMahApps.Metroを使用してアプリケーションを作成しています。データ入力が有効な場合でも、赤い枠線がTextBoxに残る

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

結果は次のようになります:良さそうに見えます

enter image description here

私はこのようなデータ入力ウィンドウのために有効に検証を持っています。問題は、TextBoxの有効な値を入力しても赤い枠線が残っていることです。あなたのタイトルとフルネームで見ることができるようにTextBoxここにあります。この残基の赤い枠線を削除するにはどうすればよいですか?それはどこから来ていますか?

enter image description here

+0

あなたのビューモデルはどのように実装されていますか?特にプロパティ(Title、FullName)。 – Jehof

+0

この問題をソートしましたか?私は同様の問題を抱えています。また、エラーチェックの実装方法を示すことができますか? – MoonKnight

+0

私はこの問題に遭遇しました。それを修正する方法はありません。それは突然現れ、それはプロパティ変更の通知とは関係ないようです。また、Validation.HasErrorsおよびValidation.Errors添付プロパティは、コントロールにエラーがないことを示します。それらのアドオンをレイヤーに置くようなコードは、レイヤーを削除せずにリセットされています。 –

答えて

0

私はそれが私に起こったとき、私はinitializeContentRendered中にデータ変更を実行しなければならなかった、この前に遭遇しました。私は実際に項目を束縛していたからです。

もう一度Stack Overflowで見たことは、ここで起こった問題でも同様です。

それは私が問題を再作成し、同様に修正しようとします助けていない場合は、私の出会いだった
<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> 

。私がそれをどのように修正したかを説明してくれたら、もう少しお手伝いできるかどうかを見てください。しかし、うまくいけば、その2つの提案のうちの1つがあなたを助けます。

私に知らせてください、それが助けてくれることを願います。

+0

OnInitialize中にビューモデルデータを更新するときに、このような事態を防ぐ方法を見つけましたか? –

関連する問題