Получите Имя TabItem или заголовок, если у него есть Ошибка проверки - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть следующее 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 - это пользовательский элемент управления. Я пытаюсь достичь, когда нажимаю кнопку «Сохранить» и хочу показать имя с ошибками проверки.

Я могу получить все ошибки проверки, но я не могу показать, какая вкладка имеет эту ошибку (как вы можете видеть на изображении ниже)

validation errors

Я пытался использовать следующий фрагмент, но он не работает

<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

Любая помощь будет признательна большое спасибо

1 Ответ

0 голосов
/ 04 февраля 2019

Хорошо, немного более подробно, чем мой комментарий: Вы хотите выделить Tabcontrol, в котором содержится ваша ошибка, если я вас правильно понимаю: представьте, что это ваш tabcontrol, а флажки - ваши поля ввода, мы привязали наш элемент tab к каждому из наших флажков..IsChecked через Multibinding это будет ваш пользовательский элемент управления и свойство .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();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...