0

私はMVVMを使用しています.プロパティInputTemplatesにxmlノードのリストがあります。ビューモデルからリストの項目を選択すると、リストが自動的に下にスクロールされるようにします。私は、ビューモデルでプロパティ「SelectedItem」を使用する必要があることを知っています。

<Border BorderBrush="{StaticResource BorderBrush}" 
IsEnabled="{Binding Path=InputTemplateBorderEnabled}" 
BorderThickness="2" CornerRadius="5" Canvas.Left="1" Canvas.Top="84" Height="240" Name="border7" Width="432" >
      <HeaderedContentControl    
                Content="{Binding Path=InputTemplates,Mode=OneTime}"
                Header="{Binding Path=INTemplateLabel}"
                ContentTemplate="{StaticResource FileTabTemplate}"
                Style="{StaticResource MainHCCStyle}" Width="420" Height="237" />
</Border>
 <DataTemplate x:Key="FileTabTemplate">
        <st:ScrollableTabControl Background="#FFF0F9F8"  
          IsSynchronizedWithCurrentItem="True" 
          ItemsSource="{Binding}" 
          ItemTemplate="{StaticResource FileTabItemTemplate}"                 
          Margin="1">
        </st:ScrollableTabControl>
</DataTemplate>
<DataTemplate x:Key="FileTabItemTemplate" >       
        <DockPanel>
            <TextBlock Name="textBlock" Text="{Binding Path=Keyword}" ToolTip="{Binding Path=FileName}"  FontFamily="Microsoft Sans Serif" FontSize="10"  TextWrapping="NoWrap"/>
        </DockPanel>

        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="True">
                <Setter TargetName="textBlock" Property="Foreground" Value="Indigo"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
ObservableCollection<CommonResource.ViewModel.FileTemplateViewModel> inputTemplates;

foreach (XMLTemplateViewModel xmlvm in inputTemplates)
{
   list = xmlvm.XMlRootNodes[iSearchRootNode];
   list.SelectedItem = MyList[iSelectionIndex];// MyList is a list of few items TreeViewWithIcons
}

list.SelectedItem を設定すると、自動的に下にスクロールした後に、選択した項目が画面に表示されるはずです。これにはイベントを使用する必要がありますか? プロパティ「SelectedItem」のコードも提供してください。

4

3 に答える 3

1

ListBox または ListView を使用している場合は、これを試すことができます。

public class ScrollIntoViewBehavior:Behavior<ListBox>
{
    protected override void OnAttached()
    {
        AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
    }

    void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count > 0)
        {
            (sender as ListBox).ScrollIntoView(e.AddedItems[0]);
        }
    }
}

ロジックを好きなように変更してください:)

于 2012-12-14T08:10:23.557 に答える
0

これは、XML アイテム ビューのデータの形式です。HeaderTextBlock が選択されたときにスクロール バーが下に移動して、選択した項目が表示されるようなトリガーを追加する方法を知りたいです。

                <HierarchicalDataTemplate  DataType="{x:Type cr:TreeViewWithIcons}" ItemsSource="{Binding Path=ChildNodes,Mode=OneTime}">                       
                        <StackPanel Orientation="Horizontal" Name="stackpanel" IsEnabled="False" >
                        <Image Source="{Binding Path=Icon}"/>
                        <TextBlock Name="HeaderTextBlock" Text="{Binding Path=HeaderText}" Background="{Binding Path=BackgroundColor,Mode=TwoWay,NotifyOnSourceUpdated=True}" Foreground="{Binding Path=HeaderColor,Mode=TwoWay,NotifyOnSourceUpdated=True}" IsEnabled="False">
                        </TextBlock>
                    </StackPanel>
                    <HierarchicalDataTemplate.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource= {RelativeSource Mode=FindAncestor, AncestorType= {x:Type TreeViewItem}},Path=IsSelected}" Value="True">
                            <Setter TargetName="HeaderTextBlock" Property="Foreground" Value="Red"/>
                            <Setter TargetName="stackpanel" Property="Background" Value="LightGray"/>
                            <Setter TargetName="HeaderTextBlock" Property="Background" Value="LightGray"/>
                            <Setter Property="BitmapEffect">
                                <Setter.Value>
                                    <OuterGlowBitmapEffect GlowColor="Black" />
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="True">
                            <Setter TargetName="HeaderTextBlock" Property="Foreground" Value="Purple"/>
                            <Setter TargetName="HeaderTextBlock" Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </HierarchicalDataTemplate.Triggers>
                </HierarchicalDataTemplate>
            </ResourceDictionary>
        </cr:ExtendedTreeView.Resources>
于 2012-12-14T09:41:35.160 に答える
0

このリンクが役立つかもしれません...

http://kiwigis.blogspot.in/2010/12/how-to-add-scrollintoview-to.html

基本的に、、、、ItemsControlなどの項目コンテナを見つけて、その関数を呼び出す必要があります。ListBoxItemTreeViewItemComboBoxItemListViewItemDataGridRowBringIntoView()

MVVM では、これは添付されたビヘイビアを介して行うことができます。

于 2012-12-14T05:48:09.343 に答える