2013-02-02 67 views
0

有一個自定義用戶控件ExpanderListUC,它包含擴展的列表中的每個擴展器具有包含標籤的列表一個StackPanel。我如何自動滾動的ScrollViewer到specefic位置

我添加了一個ScrollViewer中,並上下滾動通過擴展內容。

在某些情況下,我已經自動選擇標籤4膨脹機4通過後面的代碼。

我怎麼能自動ScrollViewer中的位置設置成選擇的標籤?

<ScrollViewer x:Name="sv" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" HorizontalAlignment="Left" Width="205"> 
     <StackPanel Name="spContentPresenter" Background="Transparent" HorizontalAlignment="Right" > 
      <StackPanel.ContextMenu> 
       <ContextMenu x:Name ="ExpanderContextMenu" StaysOpen="true"> 
        <MenuItem x:Name="collapseAllMenuItem" Header="Collapse All" Foreground="Black" /> 
        <MenuItem x:Name="expandAllMenuItem" Header="Expand All" Foreground="Black" /> 
       </ContextMenu> 
      </StackPanel.ContextMenu> 
      <Expander FlowDirection="LeftToRight" IsEnabled="True" IsExpanded="True" > 
       <!--Background="#FF1F5897"--> 
       <Expander.Header> 
        <!--<Run Text="Electrical Information" Foreground="Black"/>--> 
        <TextBlock HorizontalAlignment="Right" Foreground="Black"><Run Text="Expander 1"/></TextBlock> 
       </Expander.Header> 
       <Grid Margin="0" > 
        <StackPanel Width="200" HorizontalAlignment="Right"> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 1" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 2" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 3" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 4" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 5" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 6" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 7" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 8" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 9" Height="26" /> 
         <!--Style="{DynamicResource ClickableLabel}"--> 
        </StackPanel> 
       </Grid> 
      </Expander> 
      <Expander FlowDirection="LeftToRight" IsEnabled="True" IsExpanded="True" > 
       <!--Background="#FF1F5897"--> 
       <Expander.Header> 
        <!--<Run Text="Electrical Information" Foreground="Black"/>--> 
        <TextBlock HorizontalAlignment="Right" Foreground="Black"><Run Text="Expander 2"/></TextBlock> 
       </Expander.Header> 
       <Grid Margin="0" > 
        <StackPanel Width="200" HorizontalAlignment="Right"> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 1" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 2" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 3" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 4" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 5" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 6" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 7" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 8" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 9" Height="26" /> 
         <!--Style="{DynamicResource ClickableLabel}"--> 
        </StackPanel> 
       </Grid> 
      </Expander> 
      <Expander FlowDirection="LeftToRight" IsEnabled="True" IsExpanded="True" > 
       <!--Background="#FF1F5897"--> 
       <Expander.Header> 
        <!--<Run Text="Electrical Information" Foreground="Black"/>--> 
        <TextBlock HorizontalAlignment="Right" Foreground="Black"><Run Text="Expander 3"/></TextBlock> 
       </Expander.Header> 
       <Grid Margin="0" > 
        <StackPanel Width="200" HorizontalAlignment="Right"> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 1" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 2" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 3" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 4" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 5" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 6" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 7" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 8" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 9" Height="26" /> 
         <!--Style="{DynamicResource ClickableLabel}"--> 
        </StackPanel> 
       </Grid> 
      </Expander> 
      <Expander FlowDirection="LeftToRight" IsEnabled="True" IsExpanded="True" > 
       <!--Background="#FF1F5897"--> 
       <Expander.Header> 
        <!--<Run Text="Electrical Information" Foreground="Black"/>--> 
        <TextBlock HorizontalAlignment="Right" Foreground="Black"><Run Text="Expander 4"/></TextBlock> 
       </Expander.Header> 
       <Grid Margin="0" > 
        <StackPanel Width="200" HorizontalAlignment="Right"> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 1" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 2" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 3" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 4" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 5" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 6" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 7" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 8" Height="26" /> 
         <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 9" Height="26" /> 
         <!--Style="{DynamicResource ClickableLabel}"--> 
        </StackPanel> 
       </Grid> 
      </Expander>     
     </StackPanel> 
    </ScrollViewer> 

回答

1

我有類似的問題。做到這一點最好的辦法就是讓你的擴展分離的控制和使用的ItemsControl,像這樣:

<UserControl x:Class="WpfApplication9.UserControl1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="423" d:DesignWidth="368"> 
<Grid Background="White"> 
    <Expander FlowDirection="LeftToRight" IsEnabled="True" IsExpanded="True" > 
     <!--Background="#FF1F5897"--> 
     <Expander.Header> 
      <!--<Run Text="Electrical Information" Foreground="Black"/>--> 
      <TextBlock HorizontalAlignment="Right" Foreground="Black"><Run Text="Expander 1"/></TextBlock> 
     </Expander.Header> 
     <Grid Margin="0" > 
      <StackPanel Width="200" HorizontalAlignment="Right"> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 1" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 2" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 3" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 4" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 5" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 6" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 7" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 8" Height="26" /> 
       <Label Margin="0,0,10,0" HorizontalAlignment="Right" Content="Label 9" Height="26" /> 
       <!--Style="{DynamicResource ClickableLabel}"--> 
      </StackPanel> 
     </Grid> 
    </Expander> 
</Grid> 

<Grid x:Name="Grid"> 
    <ScrollViewer x:Name="ScrollViewer" > 
     <Grid> 
      <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding /*some list*/}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate DataType="/*some type to bind to*/"> 
         <my:UserControl1/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </Grid> 
    </ScrollViewer> 
</Grid> 


    void ScrollToIndex(int index) { 
     UIElement uiElement = (UIElement) ItemsControl.ItemContainerGenerator.ContainerFromIndex(index); 
     if (uiElement != null) { 
      double y = uiElement.TranslatePoint(new System.Windows.Point(0, 0), Grid).Y; 
      ScrollViewer.ScrollToVerticalOffset(y); 
     } 
    } 
+0

我已經有擴展的獨立控制。 我試過你的代碼,並且提供的方法不起作用。 – Cracker

相關問題