2

コントロールの入力を検証するための次のスタイルがあります。

<Style x:Key="MyErrorTemplate" TargetType="Control">
    <Style.Setters>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate x:Name="ControlErrorTemplate">
                    <StackPanel Orientation="Vertical" Height="Auto">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
                            <AdornedElementPlaceholder x:Name="Holder"/>
                        </StackPanel>
                        <Label Foreground="Red" Content="{Binding ElementName=Holder, 
                            Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

エラーが発生した場合、ラベルのエラーメッセージがコントロール(テキストボックスなど)の下に表示され、下のコントロールと重なります。StackPanelのHeight="Auto"を作成しましたが、役に立ちませんでした。各コントロールはグリッドセルにあり、グリッドの行の高さも自動です。私が欠けているものを教えてください。エラーメッセージで下にあるものをプッシュしたい。ありがとう。

4

2 に答える 2

3

Validation.ErrorTemplateは、装飾レイヤーでのエラーフィードバックを表示します。これは、レイアウトシステムが装飾された要素レイヤーでコントロールを測定および配置しているときに、このテンプレートのすべてのコントロールが考慮されないことを意味します。

于 2012-06-28T19:12:58.167 に答える
0

私はこれを見つけてLPLに感謝します、私は装飾層についてそれを知りませんでした。

私の解決策は、マージンの「ハック」でした。トリガーを使用しました:

    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
            <Setter Property="BorderBrush" Value="Red"/>
            <Setter Property="Margin" Value="0,0,0,28"/>
        </Trigger>
    </Style.Triggers> 

装飾されたテキストボックスの下マージンを増やすため。単一の文字列のテキストブロック/ラベル用のスペースを確保するのに十分な大きさのマージンを設定した後、以下のコンテンツを下に移動しました

于 2013-01-22T07:04:04.673 に答える