0

検証エラーが発生したときにカスタム 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" にアクセスする方法はありますか?

4

1 に答える 1

0

このようなスタイル要素を使用してみてください

<Style TargetType="ComboBox">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="True">
      <Setter Property="Margin" Value="2" />
    </Trigger>
  </Style.Triggers>
</Style>

このスタイルをコンボボックスに適用します

于 2013-05-30T22:48:24.137 に答える