带边框进入视野

时间:2016-07-04 14:47:48

标签: c# wpf xaml datatrigger

我有TabItem

<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"
                        DataContext="{Binding TFGW.BibleReadingItem.Main}"
                        Text="{Binding DataContext.BibleReadingMain, ElementName=oclmEditor, Mode=TwoWay, NotifyOnSourceUpdated=True, 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}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Number}"/>
                            <TextBlock Text=" - "/>
                            <TextBlock Text="{Binding Title}"/>
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </StackPanel>
    </Border>
</TabItem>

如您所见,它实现了一些DataTriggers。因此,当您更改 comboActiveStudentAssignmentType (在编辑器的右边缘上)时:

Select Bible Reading Main from combo

这就是左边控件的变化方式:

在:

Before

后:

After

DataTriggers工作正常。 Border设置正确,TabItem被选中。但是,如果可能的话,我想最终得到这个:

Scroll to view

我对此做了一些研究,似乎我需要使用BringIntoView来获得所需的结果。但这需要从后面的代码中调用。我添加了一个SelectionChanged处理程序并执行了此操作:

private void comboActiveStudentAssignmentType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    OCLMEditorViewModel vm = this.DataContext as OCLMEditorViewModel;
    if(borderBibleReadingMain != null && 
       vm.ActiveStudentAssignmentType == Data.StudentInfo.Enums.StudentAssignmentType.BibleReadingMain)
        borderBibleReadingMain.BringIntoView();
    // TODO: Add others here
}

虽然它确实被解雇了,但它似乎没有任何区别。我仍然需要滚动反应角度才能看到它。

我该怎么做?

谢谢。

0 个答案:

没有答案