Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF验证错误文本溢出_C#_Wpf_Xaml - Fatal编程技术网

C# WPF验证错误文本溢出

C# WPF验证错误文本溢出,c#,wpf,xaml,C#,Wpf,Xaml,你好,我对xaml非常陌生,我真的不知道这样的bug叫什么。 我有以下内容,并在我在代码背后创建的文本框旁边显示验证错误。我遇到的问题是,验证错误中的文本溢出了网格,ScrollViewer不会像对网格中其他子项那样展开 <UserControl.Resources> <local:ValidationModels x:Key="validationModels" textBox_Text=" " /> <ControlTemplate x:Key=

你好,我对xaml非常陌生,我真的不知道这样的bug叫什么。 我有以下内容,并在我在代码背后创建的文本框旁边显示验证错误。我遇到的问题是,验证错误中的文本溢出了网格,ScrollViewer不会像对网格中其他子项那样展开

<UserControl.Resources>
    <local:ValidationModels x:Key="validationModels" textBox_Text=" " />
    <ControlTemplate x:Key="validationTemplate" >
        <DockPanel Grid.Column="2">
            <TextBlock Foreground="Red" FontSize="15" Text="Error"  DockPanel.Dock="Right"></TextBlock>
            <AdornedElementPlaceholder/>
        </DockPanel>
    </ControlTemplate>

    <Style x:Key="InputControlErrors" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"    
          Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
然后我的xaml中有一部分

我将TextBlock控件添加到网格的第一列,将TextBox控件添加到网格的第二列

我面临的问题是,ScrollViewer使用TextBlock文本和TextBox字段展开,我可以水平滚动,但它不会展开ControlTemplate中的验证错误文本。我看到它的唯一方法是手动最大化窗口

<ControlTemplate x:Key="validationTemplate" >
    <DockPanel Grid.Column="2">
        <TextBlock Foreground="Red" FontSize="15" Text="Error"  DockPanel.Dock="Right"></TextBlock>
        <AdornedElementPlaceholder/>
    </DockPanel>
</ControlTemplate>
我将TextBlock和TextBox对象都添加到代码隐藏中的网格中

这是故意的。Validation.ErrorTemplate将显示在装饰器层上。装饰器层中的元素渲染在其余视觉元素的顶部,当布局系统测量和排列控件时,将不考虑这些元素

从MSDN:

放置在装饰器层中的任何内容都将在已设置的任何其他样式的顶部进行渲染。换句话说,装饰条在视觉上始终位于顶部,不能使用z顺序覆盖


因为不可能按照我希望的方式来做,就像他在回答中提到的mm8一样。我试着解决这个问题,它对我很有效,我在网格中添加了一个新的列,使它变小,只是为了显示其中的错误

   <Grid.ColumnDefinitions >
                    <ColumnDefinition Width="322*" />
                    <ColumnDefinition Width="165*" />
                    <ColumnDefinition Width="37*" />
   </Grid.ColumnDefinitions>
ScrollViewer将展开第三列,这将使您能够看到验证错误文本

这不是最聪明的方法,但它是有效的

这是我的工作

 <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>

******

        <TextBox Grid.Column="2" 
             Name="Maintext"
             helpers:TextBoxValidationHelper.HasError="{Binding HasError}" 
             VerticalContentAlignment="Center" 
             VerticalAlignment="Stretch" 
             Style="{StaticResource textBoxStyle}"                                                               
             Language="ru-RU" >
        <Binding Path="StrValue"
                 ValidatesOnDataErrors="True"
                 ValidatesOnExceptions="True"
                 NotifyOnValidationError="True"
                      UpdateSourceTrigger="PropertyChanged" 
                      NotifyOnSourceUpdated="True"
                 ></Binding>
    </TextBox>

    <TextBlock Grid.Column="4" Text="!" Width="10" Foreground="Red" FontSize="16" FontWeight="Bold" TextAlignment="Center" >

        <TextBlock.Style>
            <Style  TargetType="{x:Type TextBlock}">
                <Setter Property="Visibility" Value="Collapsed"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding HasError}" Value="true">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
风格

<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Resources>
            <Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="White"/>
            </Style>
        </Style.Resources>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel LastChildFill="True">
                        <Border BorderBrush="Red" BorderThickness="2"  >
                            <AdornedElementPlaceholder x:Name="adornedElement"/>
                        </Border>
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

真可悲!!是否有一种方法可以让我在文本框字段中显示错误,例如显示红色。或者,当验证错误发生时,使文本框边框变为红色?您可以在ErrorTemplate中的AdorneDeletePlaceholder周围放置边框。有关详细信息,请参阅以下博文:。
 <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>

******

        <TextBox Grid.Column="2" 
             Name="Maintext"
             helpers:TextBoxValidationHelper.HasError="{Binding HasError}" 
             VerticalContentAlignment="Center" 
             VerticalAlignment="Stretch" 
             Style="{StaticResource textBoxStyle}"                                                               
             Language="ru-RU" >
        <Binding Path="StrValue"
                 ValidatesOnDataErrors="True"
                 ValidatesOnExceptions="True"
                 NotifyOnValidationError="True"
                      UpdateSourceTrigger="PropertyChanged" 
                      NotifyOnSourceUpdated="True"
                 ></Binding>
    </TextBox>

    <TextBlock Grid.Column="4" Text="!" Width="10" Foreground="Red" FontSize="16" FontWeight="Bold" TextAlignment="Center" >

        <TextBlock.Style>
            <Style  TargetType="{x:Type TextBlock}">
                <Setter Property="Visibility" Value="Collapsed"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding HasError}" Value="true">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Resources>
            <Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="White"/>
            </Style>
        </Style.Resources>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel LastChildFill="True">
                        <Border BorderBrush="Red" BorderThickness="2"  >
                            <AdornedElementPlaceholder x:Name="adornedElement"/>
                        </Border>
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>