簡體   English   中英

WPF文本框驗證ControlTemplate在文本值上觸發

[英]Wpf textbox validation controltemplate trigger on text value

我有一個文本框:

<TextBox Grid.Row="3"
         Grid.Column="1"
         Width="200"
         TextWrapping="Wrap"
         VerticalAlignment="Top"
         Margin="5,10,-10,2"
         Style="{StaticResource TextBoxValueStyle}"
         Validation.ErrorTemplate="{StaticResource ValidationControlTemplate}">                        
                    <TextBox.Text>
                        <MultiBinding StringFormat=" {0} {1}">
                            <Binding Path="Id" ValidatesOnNotifyDataErrors="True" NotifyOnValidationError="True"/>
                            <Binding Path="Name"  />
                        </MultiBinding>
                    </TextBox.Text>
</TextBox>

這是我的控制模板:

<ControlTemplate x:Key="ValidationControlTemplate">
    <DockPanel Visibility="{Binding ElementName=Placeholder, Path=Visibility}">

        <Image x:Name="Image"
               DockPanel.Dock="Right"
               VerticalAlignment="Center"
               Margin="0,-2"
               Style="{StaticResource InformationImageStyle}">
            <Image.ToolTip>
                <ItemsControl ItemsSource="{Binding}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding ErrorContent}"/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Image.ToolTip>

        </Image>
        <AdornedElementPlaceholder Name="Placeholder" VerticalAlignment="Center"/>
    </DockPanel>
    <ControlTemplate.Triggers>
        <Trigger Property="TextBox.Text" Value="">
            <Setter Property="DockPanel.Dock" TargetName="Image" Value="Left"/>
            <Setter Property="Margin" TargetName="Image" Value="-20,-2"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

我的問題是,當文本框有一個值(並且有錯誤)時,它沒有采用原始值(DockPanel.Dock = Right和Margin = 0,-2)

我總是從空白開始。 出現錯誤時,圖像始終顯示在左側。

我想念什么?

<AdornedElementPlaceholder />元素周圍放置一個Grid ,並用綁定到裝飾的TextBox元素的DataTrigger替換Trigger

<ControlTemplate x:Key="ValidationControlTemplate">
    <DockPanel Visibility="{Binding ElementName=Placeholder, Path=Visibility}">
        <Image x:Name="Image"
                       DockPanel.Dock="Right"
                       VerticalAlignment="Center"
                       Margin="0,-2"
                       Style="{StaticResource InformationImageStyle}">
            <Image.ToolTip>
                <ItemsControl ItemsSource="{Binding}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding ErrorContent}"/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Image.ToolTip>
        </Image>
        <Grid>
            <AdornedElementPlaceholder Name="Placeholder" VerticalAlignment="Center"/>
        </Grid>
    </DockPanel>
    <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding AdornedElement.Text.Length, ElementName=Placeholder}" Value="0">
            <Setter Property="DockPanel.Dock" TargetName="Image" Value="Left"/>
            <Setter Property="Margin" TargetName="Image" Value="-20,-2"/>
        </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM