【问题标题】:WPF Combobox Validation.ErrorTemplate errorWPF Combobox Validation.ErrorTemplate 错误
【发布时间】:2010-11-04 20:09:42
【问题描述】:

我有一个组合框,我需要编辑它的错误模板以在出现验证错误时显示红色边框。

我用的是下面的样式

<Style TargetType="{x:Type ComboBox}" >
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <DockPanel>
                    <Border BorderBrush="Red" BorderThickness="3">
                        <AdornedElementPlaceholder />
                    </Border>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="FontFamily" Value="Segoe UI" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="VerticalAlignment" Value="Center" />
</Style>

发生验证错误时,边框永远不会出现。任何提示出了什么问题?

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    您发布的Style 作品。您应该检查您的绑定,您是否将ValidatesOnDataErrors=TrueValidatesOnExceptions=True 添加到SelectedValue 的绑定中?

    【讨论】:

      【解决方案2】:

      在没有停靠面板的情况下输入代码heretry,这是无用的,因为它只包含一个元素。但是,我不知道用边框包裹文本框是否有意义,因为它已经有边框了!您应该尝试直接更改其边框的颜色。您可以尝试再次使用面板,然后在面板周围放置边框,即:

      边框 BorderBrush="红色" BorderThickness="3"
      停靠面板
      装饰元素

      这更有意义,因为环绕面板没有自己的边框。

      【讨论】:

        【解决方案3】:

        使用这个。

            <Style x:Key="textBoxStyle" TargetType="{x:Type telerik:RadMaskedTextBox}">
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                        <Setter Property="Control.BorderBrush" Value="Red" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        

        【讨论】:

          【解决方案4】:

          我不喜欢这里的任何回复。简而言之,如何使用 Blend 更改 ComboBox 的错误模板的边框颜色?在 ComboBox 的现有边框周围绘制另一个边框是不可接受的。我已经想出了如何在 Blend 中创建 ControlTemplate 但不是验证模板。

          我试图让它看起来好像我已经改变了实际的边框颜色,但这不是我真正想要的。建议?为了让它更复杂一点,我想在控件的右边框之外显示一个红色星号。

          下面的代码是近距离的尝试,但它实际上是在 ComboBox 内部绘制一个边框,如果你仔细看,你可以看到与 ComboBox 边框结合时边框是 2 个像素宽:

          <DockPanel Name="myDockPanel">
                  <AdornedElementPlaceholder>
                      <Border BorderBrush="Blue" BorderThickness="1" CornerRadius="2" />
                  </AdornedElementPlaceholder>
                  <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left"  ToolTip="{Binding .CurrentItem}" />
              </DockPanel>
          

          【讨论】:

          • 有趣的是,尽管 Blend 允许我们以可视方式编辑模板,但在 Blend 中编辑 ErrorTemplate 似乎很困难,甚至不可能。
          【解决方案5】:

          我搜索了更多内容,并根据此处的另一篇文章提出了解决方案:WPF - How to apply style to AdornedElementPlaceholder's AdornedElement?

          <!-- This works -->
          <ComboBox Name="comboBox1" Style="{StaticResource NewComboBoxStyle}" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}" />
          
          <SolidColorBrush x:Key="MainBorderBrush">#FF91B3FF</SolidColorBrush>
          
          <Style x:Key="NewComboBoxStyle" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource myErrorTemplate}">
              <Setter Property="BorderBrush" Value="{DynamicResource MainBorderBrush}" />
              <Style.Triggers>
                  <Trigger Property="Validation.HasError" Value="True">
                      <Setter Property="BorderBrush" Value="Blue" />
                  </Trigger>
              </Style.Triggers>
          </Style>
          
          <!-- Sets ToolTip when Validation.HasError is True. -->
          <Style TargetType="Control" x:Key="myErrorTemplate">
              <Style.Triggers>
                  <Trigger Property="Validation.HasError" Value="true">
                      <Setter Property="ToolTip"
                          Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                          Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
                  </Trigger>
              </Style.Triggers>
          </Style>
          
          <ControlTemplate x:Key="comboBoxValidationTemplate">
              <DockPanel Name="myDockPanel">
                  <AdornedElementPlaceholder/>
                  <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left" ToolTip="{Binding .CurrentItem}" />
              </DockPanel>
          </ControlTemplate>
          

          【讨论】:

            猜你喜欢
            • 2013-11-21
            • 1970-01-01
            • 2013-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多