検証エラーが発生したときにカスタム ComboBox のマージンを設定しようとしています。これが私が使用しようとしているコードです:
<ComboBox x:Class="Emsc.Prestige.Windows.AutoCompleteComboBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="MyComboBox">
<Validation.ErrorTemplate>
<ControlTemplate>
<Border x:Name="ErrorBorder" BorderThickness="2" CornerRadius="2">
<AdornerElementPlaceholder x:Name="adorner"/>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Path=AdornedElement.(Validation.Errors)[0].ErrorContent, ElementName=adorner, Converter={StaticResource ErrorContentToErrorTypeConverter}}"
Value="Critical">
<Setter TargetName="ErrorBorder" Property="BorderBrush" Value="Red" />
<Setter TargetName="MyComboBox" Property="Margin" Value="0,0,10,0" />
</DataTrigger>
</ControlTemplate>
</Validation.ErrorTemplate>
</ComboBox>
したがって、ErrorBorder 要素に BorderBrush を設定すると、正常に動作します。しかし、MyComboBox の Margin プロパティ (または任意のプロパティ) にアクセスしようとすると、次のエラーが発生します。
「MyComboBox」という名前の要素が見つからなかったため、プロパティ「TargetName」は「Setter」の有効なターゲットを表していません。ターゲットは、それを使用するセッター、トリガー、または条件の前に宣言されていることを確認してください。
コード ビハインドではなく、XAML で MyComboBox の Margin にアクセスしたいと思います。DataTrigger の Setter を介して "TemplatedParent" にアクセスする方法はありますか?