2016-04-26 6 views
0

赤い枠線、エラーイメージ、エラーテキストを新しい行に表示するテキストボックスのスタイルを作成しました。 下の図のようなテキストボックスの下部にスペースがある場合は機能します。 Style1Wpfでテンプレートの高さをコントロールする方法

有効なテキストボックスの下に他のコントロールがある場合は、アイコンとエラーテキストが表示されません。

Style2
このテンプレートを修正する最良の方法は何ですか?

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type TextBox}"> 
        <StackPanel> 
         <Border x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
          <ScrollViewer VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         </Border> 
         <Grid x:Name="errorBlock" Visibility="Hidden" Margin="0,2,0,-30" Z> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <Image Grid.Column="0" Source="Error.png" Height="14" Width="14" 
            HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,5,0"/> 
          <TextBlock Grid.Column="1" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox}},Path=(Validation.Errors)[0].ErrorContent}" /> 
         </Grid> 
        </StackPanel> 
        <ControlTemplate.Triggers> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="Validation.HasError" Value="True"/> 
           <Condition Property="IsEnabled" Value="True"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Visibility" TargetName="errorBlock" Value="Visible" />       
         </MultiTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

答えて

0

マージンに-30を使用しないでください。予期しない動作が発生する可能性があります。私はむしろStackPanelの代わりに2行のグリッドを使用し、Visibility = "Collapsed"でAutoに2行目の高さを設定したいと思います。

<ControlTemplate TargetType="{x:Type TextBox}"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.RowDefinitions> 
      <Border x:Name="Bd" > 
       <ScrollViewer x:Name="PART_ContentHost" /> 
      </Border> 
      <Grid x:Name="errorBlock" Visibility="Collapsed" Height="14" Grid.Row="1"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="19"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <Image Source="Error.png" Height="14" Width="14" Margin="0,0,5,0"/> 
       <TextBlock Grid.Column="1" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox}},Path=(Validation.Errors)[0].ErrorContent}" /> 
      </Grid> 
     </Grid> 
     <ControlTemplate.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="Validation.HasError" Value="True"/> 
        <Condition Property="IsEnabled" Value="True"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="Visibility" TargetName="errorBlock" Value="Visible" /> 
      </MultiTrigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
関連する問題