コンテンツを検証するユーザーコントロールがあります。
IDataErrorInfo を使用して入力を検証しています (.Net 3.5 を使用する必要があります)。
私はこのチュートリアルに従っています: http://japikse.blogspot.ch/2009/07/idataerrorinfo-error-templates-and-wpf.html
これは、次のスタイルを使用していることを意味します。
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True"
ToolTip="{Binding ElementName=controlWithError,Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
<TextBlock DockPanel.Dock="Right"
Foreground="Red"
FontSize="14pt"
Margin="-15,0,0,0" FontWeight="Bold">*
</TextBlock>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="controlWithError" />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
問題は、場合によってはフォームを非表示にする必要があることです (要素が選択されていない場合) が、表示されたフォームにエラーがなく、フォーム (グリッド) を折りたたむ場合、UserControls のテキストボックス(null値を受け入れないため無効です)赤い枠とアスタリスクを取得しました:
非表示でない場合の同じフォーム: 注: 表示されるのは ErrorTemplate のコンテンツのみであり、トリガーのコンテンツ (背景がピンク、前景が黒) は適用されません。
したがって、このスタイルには何か問題があると思いますが、その理由を理解できるほど WPF スタイルに精通していません。
もう1つの奇妙なこと:これと同じ検証を行ったテキストボックス(ユーザーコントロールのテキストボックスではない)がある場合、それらは正しく非表示になります。
編集 私は、最初に、このトピックに非常に役立ついくつかの追加のものを見つけました: コントロールを非表示にするときに検証装飾を非 表示にするこれで、次のことを行いました:ユーザーコントロールの可視性を隠し要素の可視性にバインドし、ユーザーコントロールで、私はテキスト ボックスの可視性をユーザー コントロールの可視性にバインドし、(最後に) スタイル トリガーを追加します。
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<Trigger Property="Visibility" Value="Visible">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True" ToolTip="{Binding ElementName=controlWithError,Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" >
<TextBlock DockPanel.Dock="Right" Foreground="Red" FontSize="14pt" Margin="-15,0,0,0" FontWeight="Bold">*</TextBlock>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="controlWithError" />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
それはほとんど動作します!, 残っているのはどこからともなく小さな赤い点だけです.
どこから来たのですか?