2011-01-16 13 views
2

私はユーザーの入力を確認するこの検証方法を持っています。入力が間違っているか不足している場合は、テキストブロックの境界を赤に設定します。それ以外の場合はリセットします。しかし、このコードはまったく動作しません。時には境界線が赤に設定され、それ以外のときなどはそうではありません。それは、コントロール自体が再描画されていないのとほぼ同じですか?Windows Phone 7 BorderBrushは一度しか設定できません。

私は間違っていますか?

 private SolidColorBrush _errorBorderBrush = new SolidColorBrush(Colors.Red); 
     private SolidColorBrush _normalBorderBrush = new SolidColorBrush(Colors.Black); 

     private bool Validate() 
     { 
      if(txtName.Text == string.Empty) 
      { 
       txtName.BorderBrush = _errorBorderBrush; 
       return false; 
      } 
      else 
      { 
       txtName.BorderBrush = _normalBorderBrush; 
      } 

      if (pwdPassword.Password == string.Empty) 
      { 
       pwdPassword.BorderBrush = _errorBorderBrush; 
       return false; 
      } 
      else 
      { 
       pwdPassword.BorderBrush = _normalBorderBrush; 
      } 

      ... 
     } 

答えて

1

私は同じ問題を抱えていた、と私はWP7の専門家やSL/WPFの開発ではないですが、私は問題は、デフォルトのTextBoxテンプレートの集束状態が戻って、それは元の設定だとBorderBrushを元に戻すないとしなければならないと思います(同じ問題がBackgroundプロパティにも存在するようです)XAMLで自分のテンプレートを使用してこれを解決することができました...私はBlendをインストールしていないので、元のテンプレートを取り出す方法はわかりませんしかし、this pageに基づいて、私は次のように元のテンプレートがあると思う:

<Style TargetType="TextBox"> 
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/> 
<Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/> 
<Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/> 
<Setter Property="Foreground" Value="{StaticResource PhoneTextBoxForegroundBrush}"/> 
<Setter Property="BorderBrush" Value="{StaticResource PhoneTextBoxBrush}"/> 
<Setter Property="SelectionBackground" Value="{StaticResource PhoneAccentBrush}"/> 
<Setter Property="SelectionForeground" Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}"/> 
<Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> 
<Setter Property="Padding" Value="2"/> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="TextBox"> 
      <Grid Background="Transparent"> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualState x:Name="Normal"/> 
         <VisualState x:Name="MouseOver"/> 
         <VisualState x:Name="Disabled"> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0"> 
             <DiscreteObjectKeyFrame.Value> 
              <Visibility>Collapsed</Visibility> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
           </ObjectAnimationUsingKeyFrames> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0"> 
             <DiscreteObjectKeyFrame.Value> 
              <Visibility>Visible</Visibility> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
         <VisualState x:Name="ReadOnly"> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0"> 
             <DiscreteObjectKeyFrame.Value> 
              <Visibility>Collapsed</Visibility> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
           </ObjectAnimationUsingKeyFrames> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0"> 
             <DiscreteObjectKeyFrame.Value> 
              <Visibility>Visible</Visibility> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
           </ObjectAnimationUsingKeyFrames> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/> 
           </ObjectAnimationUsingKeyFrames> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/> 
           </ObjectAnimationUsingKeyFrames> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledOrReadonlyContent"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxReadOnlyBrush}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
        <VisualStateGroup x:Name="FocusStates"> 
         <VisualState x:Name="Focused"> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxEditBackgroundBrush}"/> 
           </ObjectAnimationUsingKeyFrames> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="EnabledBorder"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxEditBorderBrush}"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
         <VisualState x:Name="Unfocused"/> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
       <Border x:Name="EnabledBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Margin="{StaticResource PhoneTouchTargetOverhang}"> 
        <ContentControl x:Name="ContentElement" BorderThickness="0" HorizontalContentAlignment="Stretch" Margin="{StaticResource PhoneTextBoxInnerMargin}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Stretch"/> 
       </Border> 
       <Border x:Name="DisabledOrReadonlyBorder" BorderBrush="{StaticResource PhoneDisabledBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Margin="{StaticResource PhoneTouchTargetOverhang}" Visibility="Collapsed"> 
        <TextBox x:Name="DisabledOrReadonlyContent" Background="Transparent" Foreground="{StaticResource PhoneDisabledBrush}" FontWeight="{TemplateBinding FontWeight}" FontStyle="{TemplateBinding FontStyle}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" IsReadOnly="True" SelectionForeground="{TemplateBinding SelectionForeground}" SelectionBackground="{TemplateBinding SelectionBackground}" TextAlignment="{TemplateBinding TextAlignment}" TextWrapping="{TemplateBinding TextWrapping}" Text="{TemplateBinding Text}" Template="{StaticResource PhoneDisabledTextBoxTemplate}"/> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

私は焦点の合っていない状態とは異なる見て合焦状態を必要としなかったので、次のように私は見てFocusStates VisualStateGroupを変更:

<VisualStateGroup x:Name="FocusStates"> 
    <VisualState x:Name="Focused" /> 
    <VisualState x:Name="Unfocused"/> 
</VisualStateGroup> 

ええ、私は最もエレガントな解決策ではなく、知っているが、それは働きました私はうまくいけば、少なくともこれは正しい方向にあなたを指すのに役立ちます!

0

リターンコールである可能性があります。 リターンは単にリターン/キャンセルメソッドを意味します。あなたが帰ってきたら、方法から抜け出す - 直接。 もしtxtNameが空であれば、pwdPasswordはチェックされません。

+0

いいえ、そうではありません。たとえば、メソッドを呼び出すと、txtNameが空の場合、境界線は赤色になります。私がtxtNameのテキストですぐにそれを呼び出すと、境界線は消えません。 – Dylan

0

論理がOKならば、あなたは色で何をしているのですか?私たちはそれをすべて見ることはできませんが、デバッガでそれを実行して、なぜ呼び出されないのかを知ることができます。

ここでは、色を緑色から赤色に変更し、連続するボタンクリックに戻すサンプルコードを示します。

Pageクラスのフィールド

SolidColorBrush green = new SolidColorBrush(Colors.Green); 
SolidColorBrush red = new SolidColorBrush(Colors.Red); 

ボタンのイベントハンドラ

if (textBox1.BorderBrush != green) { 
     textBox1.BorderBrush = green; 
    } else { 
     textBox1.BorderBrush = red; 
    } 

それでも問題が解決しない場合は、私はREPROプロジェクトを作成することをお勧めしたいです。それはあなたに問題を明らかにするかもしれませんし、そうでなければ、問題を再現できる場所を人々が見られるようにここに投稿することができます。

関連する問題