2016-11-04 2 views
0

XAMLウィンドウにTextBoxがあり、このTextBoxにErrorTemplateがあります。ErrorTemplateが表示されると、XAML GridRowは自動的に縮尺されません。

ERRORTEMPLATEを以下に示し、そしてあなたが見ることができるように、私はAdornedElementPlaceholderを持って、そのテキストフィールドErrorContentにバインドされているテキストボックスが続いている:

<ControlTemplate x:Key="ValidationErrorTemplateTextBlock" TargetType="{x:Type Control}"> 
    <Border BorderBrush="Red" BorderThickness="1"> 
     <StackPanel Orientation="Vertical"> 
      <AdornedElementPlaceholder Name="AdornedElementPlaceholder" /> 
      <TextBlock Text="{Binding ElementName=AdornedElementPlaceholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
        FontSize="10" 
        Background="Red" 
        Foreground="White" 
        Padding="2" /> 
     </StackPanel> 
    </Border> 
</ControlTemplate> 

<TextBox IsEnabled="{Binding SendMessage}" 
        Text="{Binding AutoMessageSubject, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 
        Style="{StaticResource StyleBase}" 
        Validation.ErrorTemplate="{StaticResource ValidationErrorTemplateTextBlock}" 
        HorizontalAlignment="Stretch" 
        Grid.Row="3" 
        Grid.Column="1" 
        Grid.ColumnSpan="2" /> 

これは一つのことを除いて、正常に動作します: TextBoxはHeight = "Auto"のGridRowの内部にあります。行はテキストボックスに基づいてスケールされますが、ErrorTemplateが表示されたときに下部に余分なTextBoxが表示されると、GridRowは新しいTextBoxを含むように拡大されず、新しいTextBoxはその下の要素と重なります。

どうすればこの問題を解決できますか?

答えて

0

あなたは、行/列の定義を追加しようとする場合があります:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
+0

何に追加しますか?コントロールテンプレート? – user884248

+0

周り

1

Validation.ErrorTemplate:ControlTemplateのはadorner層上の検証エラーのフィードバックを生成するために使用さを取得または設定します。

これはValidation.ErrorTemplateを使用している場合、検証エラーが通常のコンテンツの上の層上に表示されていることを意味するので、「第二」のTextBlockはないグリッドセル内に、グリッド上に表示されます。

私はIDataErrorInfoの半製品ではなく、カスタムテキストボックススタイルを使用し、2番目のTextBlockの可視性をHasErrorsプロパティにバインドします。以下の例では、2番目のTextBlockの代わりにToolTipを使用しています。

 <Style TargetType="{x:Type TextBox}"> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="True"> 
        <Setter Property="ToolTip"> 
         <Setter.Value> 
          <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"> 
           <ItemsControl DisplayMemberPath="ErrorContent" ItemsSource="{Binding Path=(Validation.Errors)}" /> 
          </ToolTip> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
+0

恐ろしい答えです。ありがとうございました。これを少し試してみます。 – user884248

関連する問題