-1

App.xaml で、Validation.ErrorTemplate動的リソースに依存するのリソースを定義しましたBorderBrushBorderBrush私が持っている各ウィンドウと、ウィンドウ内の異なるブロック内で一意に定義するつもりです。

<!--validation error template-->
<ControlTemplate x:Key="NonValid">
    <Border BorderBrush="{DynamicResource BorderBrush}" BorderThickness="2" Margin="5">
        <AdornedElementPlaceholder x:Name="ui"/>
    </Border>
</ControlTemplate>

これは私の問題を示すためのものです(動的ブラシリソースも使用)

<!--test template-->
<ControlTemplate x:Key="ButtonRes" TargetType="Button">
    <Border BorderBrush="{DynamicResource BorderBrush}" BorderThickness="2" Background="Khaki">
        <ContentPresenter />
    </Border>
</ControlTemplate>

これらのテンプレートを使用するウィンドウは、通常のテンプレートのブラシ リソースを解決できますが、Validation.ErrorTemplate!

どのように見えるか

<Window x:Class="MyApp.MyWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Test" Height="300" Width="300">
    <Window.Resources>
        <!-- window overrides resource-->
        <SolidColorBrush x:Key="BorderBrush" Color="Blue"/>
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <!-- button can see window resource-->
        <Button Template="{StaticResource ButtonRes}"/>        

        <Grid Grid.Row="1">
            <Grid.Resources>
                <!-- grid overrides resource-->
                <SolidColorBrush x:Key="BorderBrush" Color="Red"/>
            </Grid.Resources>

            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <!-- button can see grid resource-->
            <Button Template="{StaticResource ButtonRes}"/>

            <!-- errorTemplate CAN     SEE window resource-->
            <!-- errorTemplate CAN NOT SEE grid   resource-->
            <TextBox Grid.Row="1" VerticalAlignment="Center" Text="{Binding Name}" 
                 Validation.ErrorTemplate="{StaticResource NonValid}"/>
        </Grid>
    </Grid>
</Window>

TextBox の周りに赤い境界線を表示するにはどうすればよいですか?

4

2 に答える 2

3

あなたが見ている行動は完全に問題ありません。その背後にある理由:

Validation.ErrorTemplateadorner layerウィンドウ内の他のすべてのコントロールの上に配置されるウィンドウの中に配置されます。そのため、グリッド レベルで定義されたリソースを確認できず、ウィンドウ リソースで参照を解決できません。

動的に解決したい場合は、ウィンドウ リソースで宣言するか、静的割り当てを使用するしかありません。

于 2016-01-26T15:25:48.487 に答える