本文介绍了将焦点矩形设置为红色/透明并确保可见的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个相关的问题和建议的答案

左下方是几个控件,用于显示所选学生(以及适用的助手).编辑器为学生支持 3 个班级.因此,我将每个班级的学生放在 TabItem 控件上.

示例:

如您所见,它有一个 TabControl 包含 3 个项目(大厅、1 级和 2 级).在每个选项卡项目上,他们都有自己的 TabControl 和 3 个学生项目.

你看到文本框旁边的那些小图标了吗?如果你点击它们,它们会影响编辑器右侧结束的组合:

因此,当您单击一个小图标时,它会自动在右侧的组合中选择正确的条目.然后,当您从网格中选择一个学生时,它会填充到编辑器的右侧部分:

问题

当用户手动更改右侧的组合时,则需要在左侧正确设置焦点矩形.所以当一个项目被选中时,它需要:

  1. 将选项卡项设置为选中状态(如果需要).
  2. 将矩形的边框画笔设置为红色而不是透明.

我已经让它根据需要设置矩形颜色,但我还没有设法使用行为来做到这一点(根据相关问题).此外,当我尝试摆弄 'TabItem' 对象的 IsSelected 属性时,我发现它们有时会在屏幕上折叠.我已经注释掉了我的代码.

我很抱歉问了更冗长的问题,但我会被要求澄清,所以我试图先把它掩盖起来.

所以:

有两个主要的 TabControl 对象:

首先是圣经阅读项目:

<TabItem x:Name="tabTFGWReadingMainHall" Header="主厅" DataContext="{绑定会议}"><TabItem.Style><Style TargetType="{x:Type TabItem}"><Setter Property="IsEnabled" Value="False"/><!--<Setter Property="IsSelected" Value="False"/>--><Style.Triggers><DataTrigger Binding="{Binding NumberClasses, ConverterParameter=1, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True"><Setter Property="IsEnabled" Value="True"/></数据触发器><!--<DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingMain}"><Setter Property="IsSelected" Value="True"/></DataTrigger>--></Style.Triggers></风格></TabItem.Style><Border x:Name="borderBibleReadingMain" BorderThickness="5"><边框样式><Style TargetType="Border"><Setter Property="BorderBrush" Value="透明"/><Style.Triggers><DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingMain}"><Setter Property="BorderBrush" Value="Red"/></数据触发器></Style.Triggers></风格></Border.Style><堆栈面板><StackPanel.Style><Style TargetType="{x:Type StackPanel}"><Setter Property="IsEnabled" Value="False"/><Style.Triggers><DataTrigger Binding="{Binding NumberClasses, ConverterParameter=1, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True"><Setter Property="IsEnabled" Value="True"/></数据触发器></Style.Triggers></风格></StackPanel.Style><标签内容="学生:"/><网格><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="auto"/></Grid.ColumnDefinitions><TextBox x:Name="textBibleReadingMain" Grid.Column="0" Margin="2" IsEnabled="False"Text="{Binding BibleReadingMainName, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/><Button x:Name="buttonBibleReadingMain" Grid.Column="1" Background="Transparent"DataContext="{Binding DataContext, ElementName=oclmEditor}"Command="{Binding ApplicationCommand}" CommandParameter="BibleReadingMain"><Image Source="Images/AssignmentTypeBibleReading16.png" Margin="2"/></按钮></网格><标签内容="研究:"/><ComboBox DataContext="{Binding DataContext, ElementName=oclmEditor}"ItemsSource="{绑定阅读学习点列表}"ItemContainerStyle="{StaticResource StudyPointComboBoxStyle}"ItemTemplate="{StaticResource StudyPointComboItem}"Validation.ErrorTemplate="{StaticResource StudyPointValidationTemplate}"Tag="{Binding Meeting.BibleReadingMainName, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"SelectedValue="{Binding Meeting.BibleReadingMainStudyPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"SelectedValuePath="数字"><!--<ComboBox.Style><样式目标类型=组合框"BasedOn="{StaticResource {x:Type ComboBox}}"><Style.Triggers><Trigger Property="Validation.HasError" Value="True"><二传手属性="工具提示"Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/></触发器></Style.Triggers></风格></ComboBox.Style><ComboBox.SelectedValue><绑定路径="Meeting.BibleReadingMainStudyPoint"模式=双向"UpdateSourceTrigger="PropertyChanged"NotifyOnValidationError="True"><Binding.ValidationRules><ValidationRules:StudyPointValidationRule BibleReading="True"/></Binding.ValidationRules></绑定></ComboBox.SelectedValue>--></组合框></StackPanel></边框></TabItem><TabItem x:Name="tabTFGWReadingClass1" Header="Class 1" DataContext="{绑定会议}"><TabItem.Style><Style TargetType="{x:Type TabItem}"><Setter Property="IsEnabled" Value="False"/><Setter Property="IsSelected" Value="False"/><Style.Triggers><DataTrigger Binding="{Binding NumberClasses, ConverterParameter=2, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True"><Setter Property="IsEnabled" Value="True"/></数据触发器><DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass1}"><Setter Property="IsSelected" Value="True"/></数据触发器></Style.Triggers></风格></TabItem.Style><Border x:Name="borderBibleReadingClass1" BorderThickness="5"><边框样式><Style TargetType="Border"><Setter Property="BorderBrush" Value="透明"/><Style.Triggers><DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass1}"><Setter Property="BorderBrush" Value="Red"/></数据触发器></Style.Triggers></风格></Border.Style><堆栈面板><StackPanel.Style><Style TargetType="{x:Type StackPanel}"><Setter Property="IsEnabled" Value="False"/><Style.Triggers><DataTrigger Binding="{Binding NumberClasses, ConverterParameter=2, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True"><Setter Property="IsEnabled" Value="True"/></数据触发器></Style.Triggers></风格></StackPanel.Style><标签内容="学生:"/><网格><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="auto"/></Grid.ColumnDefinitions><TextBox x:Name="textBibleReadingClass1" Grid.Column="0" Margin="2" IsEnabled="False"Text="{Binding BibleReadingClass1Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/><Button x:Name="buttonBibleReadingClass1" Grid.Column="1" Background="Transparent"DataContext="{Binding DataContext, ElementName=oclmEditor}"Command="{Binding ApplicationCommand}" CommandParameter="BibleReadingClass1"><Image Source="Images/AssignmentTypeBibleReading16.png" Margin="2"/></按钮></网格><标签内容="研究:"/><ComboBox DataContext="{Binding DataContext, ElementName=oclmEditor}"ItemsSource="{绑定阅读学习点列表}"ItemContainerStyle="{StaticResource StudyPointComboBoxStyle}"ItemTemplate="{StaticResource StudyPointComboItem}"Tag="{Binding Meeting.BibleReadingClass1Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"SelectedValue="{Binding Meeting.BibleReadingClass1StudyPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"SelectedValuePath="数字"/></StackPanel></边框></TabItem><TabItem x:Name="tabTFGWReadingClass2" Header="Class 2" DataContext="{绑定会议}"><TabItem.Style><Style TargetType="{x:Type TabItem}"><Setter Property="IsEnabled" Value="False"/><Setter Property="IsSelected" Value="False"/><Style.Triggers><DataTrigger Binding="{Binding NumberClasses, ConverterParameter=3, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True"><Setter Property="IsEnabled" Value="True"/></数据触发器><DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass2}"><Setter Property="IsSelected" Value="True"/></数据触发器></Style.Triggers></风格></TabItem.Style><Border x:Name="borderBibleReadingClass2" BorderThickness="5"><边框样式><Style TargetType="Border"><Setter Property="BorderBrush" Value="透明"/><Style.Triggers><DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass2}"><Setter Property="BorderBrush" Value="Red"/></数据触发器></Style.Triggers></风格></Border.Style><堆栈面板><StackPanel.Style><Style TargetType="{x:Type StackPanel}"><Setter Property="IsEnabled" Value="False"/><Style.Triggers><DataTrigger Binding="{Binding NumberClasses, ConverterParameter=3, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True"><Setter Property="IsEnabled" Value="True"/></数据触发器></Style.Triggers></风格></StackPanel.Style><标签内容="学生:"/><网格><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="auto"/></Grid.ColumnDefinitions><TextBox x:Name="textBibleReadingClass2" Grid.Column="0" Margin="2" IsEnabled="False"Text="{Binding BibleReadingClass2Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/><Button x:Name="buttonBibleReadingClass2" Grid.Column="1" Background="Transparent"DataContext="{Binding DataContext, ElementName=oclmEditor}"Command="{Binding ApplicationCommand}" CommandParameter="BibleReadingClass2"><Image Source="Images/AssignmentTypeBibleReading16.png" Margin="2"/></按钮></网格><标签内容="研究:"/><ComboBox DataContext="{Binding DataContext, ElementName=oclmEditor}"ItemsSource="{绑定阅读学习点列表}"ItemContainerStyle="{StaticResource StudyPointComboBoxStyle}"ItemTemplate="{StaticResource StudyPointComboItem}"Tag="{Binding Meeting.BibleReadingClass2Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"SelectedValue="{Binding Meeting.BibleReadingClass2StudyPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"SelectedValuePath="数字"/></StackPanel></边框></TabItem></TabControl>

第二个是 tabControlAYFMStudents 控件,但我必须限制我的问题主体.所以我没有展示.

我不希望有人通读我的所有代码.所以如果你认为我应该删除这个问题,那么请告诉我.或者如果你认为我可以在其他地方问它.

我只想能够根据当前选择的组合项将矩形边框设置为透明(或红色).并且,确保它是可见的.

呸!谢谢.

解决方案

我在夜间决定使用背后的代码将是解决我的问题的最简单的解决方案.我为 SelectionChanged 事件添加了一个处理程序:

private void comboActiveStudentAssignmentType_SelectionChanged(object sender, SelectionChangedEventArgs e){列表边框 = 新列表();//边框列表(焦点矩形)匹配赋值类型的组合border.Add(borderBibleReadingMain);边框.添加(borderBibleReadingClass1);边框.添加(borderBibleReadingClass2);边框.添加(borderMainHallStudent1);边框.添加(borderMainHallAssistant1);边框.添加(borderMainHallStudent2);边框.添加(borderMainHallAssistant2);边框.添加(borderMainHallStudent3);边框.添加(borderMainHallAssistant3);边框.添加(borderClass1Student1);边框.添加(borderClass1Assistant1);边框.添加(borderClass1Student2);边框.添加(borderClass1Assistant2);边框.添加(borderClass1Student3);边框.添加(borderClass1Assistant3);边框.添加(borderClass2Student1);边框.添加(borderClass2Assistant1);边框.添加(borderClass2Student2);边框.添加(borderClass2Assistant2);边框.添加(borderClass2Student3);边框.添加(borderClass2Assistant3);//遍历边界for(int iBorder = 0; iBorder 

}

这很好用.当您更改组合时,正确的 Border 设置为红色,其关联的 TabItem 设置为 Selected.

此外,我将关联的 Expander 设置为已扩展.这意味着我 95% 都在我想去的地方.我可以从 XAML 中删除所有 DataTriggers,因为它现在都在这个处理程序中进行管理.

但是,此调用似乎不起作用:

borders[iBorder].BringIntoView();

因此,即使上面设置了边框属性并确保选择了它的选项卡项,我也无法确保控件在屏幕外可见.

更新

答案说明了如何将矩形置于视野中:

var localBorderIndex = iBorder;//复制以避免循环变量的关闭Dispatcher.InvokeAsync(() => border[localBorderIndex].BringIntoView(),DispatcherPriority.Background);

I have a related question with a proposed answer here but my issue is more complex and I think it is best to start a new question. I hope that is OK.

I think it is important to visually show you what I am trying to do first. Here is an overview of the editor:

Down the left are several controls that are used to display the chosen students (and assistants where applicable). The editor supports 3 classes for the students. Thus, I have the students for each class on a TabItem control.

Example:

As you can see, it has a TabControl with 3 items (Main Hall, Class 1 and Class 2). On each of those tab items they then have their own TabControl with the 3 student items.

You see those small icons next to the text boxes? If you click those then they affect a combo that is over on the right side of the editor:

So when you click a small icon, it automatically selects the right entry in the combo on the right. Then, as you select a student from the grid it gets populated into the right part of the editor:

The Issue

When the user manually changes the combo over on the right, it then needs to set a focus rectangle over on th left hand side correctly. So when a item is selected it needs to:

  1. Set the tab item as selected (if needed).
  2. Set the border brush of the rectangle to red instead of transparent.

I have got it to set the rectangle colours as required but I have not yet managed to do that using behaviours (as per the related question). In addition, when I try fiddling with the IsSelected property of the 'TabItem' objects I find that they sometimes kind of collapse on screen. I have commented out my code.

I am sorry for the wordier question but I will get asked for clarification so I am trying to cover it up front.

So:

There are two main TabControl objects:

The first is the bible reading items:

<TabControl Grid.Row="1" Grid.ColumnSpan="2">
    <TabItem x:Name="tabTFGWReadingMainHall" Header="Main Hall" DataContext="{Binding Meeting}">
        <TabItem.Style>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="IsEnabled" Value="False"/>
                <!--<Setter Property="IsSelected" Value="False"/>-->
                <Style.Triggers>
                    <DataTrigger Binding="{Binding NumberClasses, ConverterParameter=1, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True">
                        <Setter Property="IsEnabled" Value="True" />
                    </DataTrigger>
                    <!--<DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingMain}">
                        <Setter Property="IsSelected" Value="True"/>
                    </DataTrigger>-->
                </Style.Triggers>
            </Style>
        </TabItem.Style>
        <Border x:Name="borderBibleReadingMain" BorderThickness="5">
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingMain}">
                            <Setter Property="BorderBrush" Value="Red"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
            <StackPanel>
                <StackPanel.Style>
                    <Style TargetType="{x:Type StackPanel}">
                        <Setter Property="IsEnabled" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding NumberClasses, ConverterParameter=1, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True">
                                <Setter Property="IsEnabled" Value="True" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Style>
                <Label Content="Student:"/>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBox x:Name="textBibleReadingMain" Grid.Column="0" Margin="2" IsEnabled="False"
                        Text="{Binding BibleReadingMainName, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
                    <Button x:Name="buttonBibleReadingMain" Grid.Column="1" Background="Transparent"
                        DataContext="{Binding DataContext, ElementName=oclmEditor}"
                            Command="{Binding ApplicationCommand}" CommandParameter="BibleReadingMain">
                        <Image Source="Images/AssignmentTypeBibleReading16.png" Margin="2"/>
                    </Button>
                </Grid>
                <Label Content="Study:"/>

                <ComboBox DataContext="{Binding DataContext, ElementName=oclmEditor}"
                      ItemsSource="{Binding ReadingStudyPointsList}"
                      ItemContainerStyle="{StaticResource StudyPointComboBoxStyle}"
                      ItemTemplate="{StaticResource StudyPointComboItem}"
                      Validation.ErrorTemplate="{StaticResource StudyPointValidationTemplate}"
                      Tag="{Binding Meeting.BibleReadingMainName, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedValue="{Binding Meeting.BibleReadingMainStudyPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedValuePath="Number">
                    <!--<ComboBox.Style>
                    <Style 
                        TargetType="ComboBox" 
                        BasedOn="{StaticResource {x:Type ComboBox}}">
                        <Style.Triggers>
                            <Trigger Property="Validation.HasError" Value="True">
                                <Setter 
                                    Property="ToolTip"
                                    Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ComboBox.Style>
                <ComboBox.SelectedValue>
                    <Binding Path="Meeting.BibleReadingMainStudyPoint"
                         Mode="TwoWay"
                         UpdateSourceTrigger="PropertyChanged"
                         NotifyOnValidationError="True">
                        <Binding.ValidationRules>
                            <ValidationRules:StudyPointValidationRule BibleReading="True"/>
                        </Binding.ValidationRules>
                    </Binding>
                </ComboBox.SelectedValue>-->
                </ComboBox>
            </StackPanel>
        </Border>
    </TabItem>
    <TabItem x:Name="tabTFGWReadingClass1" Header="Class 1" DataContext="{Binding Meeting}">
        <TabItem.Style>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="IsEnabled" Value="False"/>
                <Setter Property="IsSelected" Value="False"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding NumberClasses, ConverterParameter=2, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True">
                        <Setter Property="IsEnabled" Value="True" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass1}">
                        <Setter Property="IsSelected" Value="True"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TabItem.Style>
        <Border x:Name="borderBibleReadingClass1" BorderThickness="5">
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass1}">
                            <Setter Property="BorderBrush" Value="Red"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
            <StackPanel>
                <StackPanel.Style>
                    <Style TargetType="{x:Type StackPanel}">
                        <Setter Property="IsEnabled" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding NumberClasses, ConverterParameter=2, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True">
                                <Setter Property="IsEnabled" Value="True" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Style>
                <Label Content="Student:"/>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBox x:Name="textBibleReadingClass1" Grid.Column="0" Margin="2" IsEnabled="False"
                    Text="{Binding BibleReadingClass1Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
                    <Button x:Name="buttonBibleReadingClass1" Grid.Column="1" Background="Transparent"
                    DataContext="{Binding DataContext, ElementName=oclmEditor}"
                        Command="{Binding ApplicationCommand}" CommandParameter="BibleReadingClass1">
                        <Image Source="Images/AssignmentTypeBibleReading16.png" Margin="2"/>
                    </Button>
                </Grid>
                <Label Content="Study:"/>
                <ComboBox DataContext="{Binding DataContext, ElementName=oclmEditor}"
                      ItemsSource="{Binding ReadingStudyPointsList}"
                      ItemContainerStyle="{StaticResource StudyPointComboBoxStyle}"
                      ItemTemplate="{StaticResource StudyPointComboItem}"
                      Tag="{Binding Meeting.BibleReadingClass1Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedValue="{Binding Meeting.BibleReadingClass1StudyPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedValuePath="Number"/>
            </StackPanel>
        </Border>
    </TabItem>
    <TabItem x:Name="tabTFGWReadingClass2" Header="Class 2" DataContext="{Binding Meeting}">
        <TabItem.Style>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="IsEnabled" Value="False"/>
                <Setter Property="IsSelected" Value="False"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding NumberClasses, ConverterParameter=3, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True">
                        <Setter Property="IsEnabled" Value="True" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass2}">
                        <Setter Property="IsSelected" Value="True"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TabItem.Style>
        <Border x:Name="borderBibleReadingClass2" BorderThickness="5">
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding SelectedItem, ElementName=comboActiveStudentAssignmentType}" Value="{x:Static StudentInfoEnums:StudentAssignmentType.BibleReadingClass2}">
                            <Setter Property="BorderBrush" Value="Red"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
            <StackPanel>
                <StackPanel.Style>
                    <Style TargetType="{x:Type StackPanel}">
                        <Setter Property="IsEnabled" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding NumberClasses, ConverterParameter=3, Converter={StaticResource IsEqualOrGreaterThanConverter}}" Value="True">
                                <Setter Property="IsEnabled" Value="True" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Style>
                <Label Content="Student:"/>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBox x:Name="textBibleReadingClass2" Grid.Column="0" Margin="2" IsEnabled="False"
                Text="{Binding BibleReadingClass2Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
                    <Button x:Name="buttonBibleReadingClass2" Grid.Column="1" Background="Transparent"
                DataContext="{Binding DataContext, ElementName=oclmEditor}"
                    Command="{Binding ApplicationCommand}" CommandParameter="BibleReadingClass2">
                        <Image Source="Images/AssignmentTypeBibleReading16.png" Margin="2"/>
                    </Button>
                </Grid>
                <Label Content="Study:"/>
                <ComboBox DataContext="{Binding DataContext, ElementName=oclmEditor}"
                      ItemsSource="{Binding ReadingStudyPointsList}"
                      ItemContainerStyle="{StaticResource StudyPointComboBoxStyle}"
                      ItemTemplate="{StaticResource StudyPointComboItem}"
                      Tag="{Binding Meeting.BibleReadingClass2Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedValue="{Binding Meeting.BibleReadingClass2StudyPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      SelectedValuePath="Number"/>
            </StackPanel>
        </Border>
    </TabItem>
</TabControl>

The second is the tabControlAYFMStudents control but I have to keep my question body limited. So I have not shown it.

I don't expect anyone to read through all my code. So if you think I should remove this question then please advise me so. Or if you think I can ask it somewhere else.

I would just like to be able to get the rectangle border set as transparent (or red) based on the current combo item selected. And, ensure it is visible.

Phew! Thank you.

解决方案

I decided during the night that using the code behind would be the simplest solution for my issues. I added a handler for the SelectionChanged event:

private void comboActiveStudentAssignmentType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    List<Border> borders = new List<Border>();

    // The list of border (focus rectangles) matches the combo of assignment types
    borders.Add(borderBibleReadingMain);
    borders.Add(borderBibleReadingClass1);
    borders.Add(borderBibleReadingClass2);
    borders.Add(borderMainHallStudent1);
    borders.Add(borderMainHallAssistant1);
    borders.Add(borderMainHallStudent2);
    borders.Add(borderMainHallAssistant2);
    borders.Add(borderMainHallStudent3);
    borders.Add(borderMainHallAssistant3);
    borders.Add(borderClass1Student1);
    borders.Add(borderClass1Assistant1);
    borders.Add(borderClass1Student2);
    borders.Add(borderClass1Assistant2);
    borders.Add(borderClass1Student3);
    borders.Add(borderClass1Assistant3);
    borders.Add(borderClass2Student1);
    borders.Add(borderClass2Assistant1);
    borders.Add(borderClass2Student2);
    borders.Add(borderClass2Assistant2);
    borders.Add(borderClass2Student3);
    borders.Add(borderClass2Assistant3);

    // Loop through the borders
    for(int iBorder = 0; iBorder < borders.Count; iBorder++)
    {
        // Is this border the active student assignment?
        if (comboActiveStudentAssignmentType.SelectedIndex == iBorder)
        {
            // Yes, so use a red brush for the background
            borders[iBorder].BorderBrush = Brushes.Red;

            // Now we must ensure the correct tab item is visible
            if(iBorder >= 0 && iBorder <= 2)
            {
                expandTFGW.IsExpanded = true;

                if (iBorder == 0)
                    tabTFGWReadingMainHall.IsSelected = true;
                else if (iBorder == 1)
                    tabTFGWReadingClass1.IsSelected = true;
                else if (iBorder == 2)
                    tabTFGWReadingClass2.IsSelected = true;
            }
            else if (iBorder >= 3 && iBorder <= 8)
            {
                expandAYFM.IsExpanded = true;
                tabAYFMStudentsMainHall.IsSelected = true;

                if (iBorder == 3 || iBorder == 4)
                    tabMainHallItem1.IsSelected = true;
                else if (iBorder == 5 || iBorder == 6)
                    tabMainHallItem2.IsSelected = true;
                else if (iBorder == 7 || iBorder == 8)
                    tabMainHallItem3.IsSelected = true;
            }
            else if (iBorder >= 9 && iBorder <= 14)
            {
                expandAYFM.IsExpanded = true;
                tabAYFMStudentsClass1.IsSelected = true;

                if (iBorder == 9 || iBorder == 10)
                    tabClass1Item1.IsSelected = true;
                else if (iBorder == 11 || iBorder == 12)
                    tabClass1Item2.IsSelected = true;
                else if (iBorder == 13 || iBorder == 14)
                    tabClass1Item3.IsSelected = true;
            }
            else if (iBorder >= 15)
            {
                expandAYFM.IsExpanded = true;
                tabAYFMStudentsClass2.IsSelected = true;

                if (iBorder == 15 || iBorder == 16)
                    tabClass2Item1.IsSelected = true;
                else if (iBorder == 17 || iBorder == 18)
                    tabClass2Item2.IsSelected = true;
                else if (iBorder == 19 || iBorder == 20)
                    tabClass2Item3.IsSelected = true;
            }

            borders[iBorder].BringIntoView();
        }
        else
        {
            // No, so set the background to transparent so we can't see it.
            borders[iBorder].BorderBrush = Brushes.Transparent;
        }
    }
}

}

This works fine. As you change the combo the correct Border is set to red and it's associated TabItem is set to Selected.

In addition, I set the associated Expander to expanded. This means I am 95% where I want to be. I can remove all of the DataTriggers from the XAML as it is all now managed in this one handler.

However, this call doesn't seem to work:

borders[iBorder].BringIntoView();

So even though the above will set the border properties and ensure it's tab item is selected, I can't ensure the control is visible if it is off-screen.

Update

This answer explains how tobring the rectangle into view:

var localBorderIndex = iBorder; // copy to avoid closure of loop variable
Dispatcher.InvokeAsync(() => borders[localBorderIndex].BringIntoView(),
    DispatcherPriority.Background);

这篇关于将焦点矩形设置为红色/透明并确保可见的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 02:51