繁体   English   中英

获取TabItem名称或标头(如果它具有验证错误)

[英]Get the TabItem Name or header if it has validation Error

我有以下的TabConrol

<telerik:RadTabControl 
        Grid.Row="2" VerticalAlignment="Top" SelectedIndex="{Binding SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
            DisplayMemberPath="Content" DropDownDisplayMode="Visible" ScrollMode="Item" BorderThickness="0">
        <telerik:RadTabItem DropDownContent="Job Config" Header="Job Config" >
            <telerik:RadTabItem.Content>
                <ScrollViewer  HorizontalScrollBarVisibility="Auto">
                    <local:JobGroupsCars DataContext="{Binding}" Margin="10" IsEnabled="{Binding Job.IsNotInEditMode ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
                </ScrollViewer>
            </telerik:RadTabItem.Content>
        </telerik:RadTabItem>
        <telerik:RadTabItem 
            DropDownContent="Job Info" Header="Job Info" >
            <telerik:RadTabItem.Content>
                <ScrollViewer  HorizontalScrollBarVisibility="Auto">
                    <local:JobDetailView DataContext="{Binding}" Margin="10" IsEnabled="{Binding Job.IsNotInEditMode ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                </ScrollViewer>
            </telerik:RadTabItem.Content>
        </telerik:RadTabItem>

    <-- more tabs go here -->

    </telerik:RadTabControl>

如您所见,TabItem是一个用户控件,我要实现的功能是单击保存按钮时,我想显示具有验证错误的名称

我无法获得所有验证错误,但无法显示哪个标签存在此错误(如下图所示)

验证错误

我尝试使用以下代码段,但无法正常工作

<UserControl.Resources>

    <ControlTemplate x:Key="ValidationTabTemplate">

        <DockPanel LastChildFill="True">

            <Image Width="32" Height="32"

                   Source="../Assets/Delete_Icon.png" Opacity="0.75"

                   ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource AncestorType={x:Type Adorner}, Mode=FindAncestor}}"

            />

            <AdornedElementPlaceholder/>

        </DockPanel>

    </ControlTemplate>
    <Style x:Key="CustomTabError" TargetType="{x:Type telerik:RadTabItem}">

        <Style.Triggers>

            <Trigger Property="Validation.HasError" Value="true">

                <Setter Property="HeaderTemplate"

                            Value="{StaticResource ValidationTabTemplate}"/>


            </Trigger>

        </Style.Triggers>

    </Style>
</UserControl.Resources>

我正在将WPF与MVVM一起使用

任何帮助,将不胜感激,非常感谢

好的,比我的评论要详细一点:如果我正确理解您的信息,那么您想增强包含错误的Tabcontrol:想象一下,这是您的tabcontrol,而Checkboxes是您的输入字段,我们将我们的tab项目绑定到了每个复选框。多绑定这将是您的自定义控件和.Validation.HasError属性

如果未选中任何CheckBoxes(或者在您的情况下发生错误),则使用多转换器将tabcontrol的前景变为红色。

  <TabControl>
    <TabItem Header="Test">
        <TabItem.Foreground>
            <MultiBinding Converter="{StaticResource MultiEval}">
                <Binding  ElementName="CB1" Path="IsChecked"/>
                <Binding  ElementName="CB2" Path="IsChecked"/>
                <Binding  ElementName="CB3" Path="IsChecked"/>

            </MultiBinding>            
        </TabItem.Foreground>
        <StackPanel>                
            <CheckBox Name="CB1"></CheckBox>
            <CheckBox Name="CB2"></CheckBox>
            <CheckBox Name="CB3"></CheckBox>

        </StackPanel>
    </TabItem>

<Window.Resources>
    <loc:MultiEvaluator x:Key="MultiEval"/>
</Window.Resources>

转换器:

public class MultiEvaluator : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        foreach (var value in values)
        {
            if (!System.Convert.ToBoolean(value))
            {
                return Brushes.Red;
            }
        }
        return Brushes.Black;
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM