Export (0) Print
Expand All

MenuScrollingVisibilityConverter Class

Represents a data-binding converter to handle the visibility of repeat buttons in scrolling menus.

Namespace:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)
XMLNS for XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

public sealed class MenuScrollingVisibilityConverter : IMultiValueConverter
<MenuScrollingVisibilityConverter .../>

The MenuScrollingVisibilityConverter determines whether a menu should display the repeat buttons when a menu has too many items to fit on the screen at once. Use the converter with a MultiBinding that has four bindings. The four bindings should be to properties of the parent ScrollViewer: If the menu items are organized vertically (which is the default for menus), bind to ComputedVerticalScrollBarVisibility, VerticalOffset, ExtentHeight, and ViewportHeight. If the menu items are organized horizontally, bind to ComputedHorizontalScrollBarVisibility, HorizontalOffset, ExtentWidth, and ViewportWidth.

Set MultiBinding.ConverterParameter to 0 or 100. The value is treated as a percentage and determines whether a button is hidden when the ScrollViewer is at the given location. When the ScrollViewer is at the top, the position of the ScrollViewer is 0% and the top button is hidden. When the ScrollViewer is at the bottom, the position of the ScrollViewer is 100% and the bottom button is hidden.

The following example uses the MenuScrollingVisibilityConverter in the ControlTemplate of a ScrollViewer for a menu. For the complete example, see Styling with ControlTemplates Sample.

<!--ScrollViewer for a MenuItem-->
<ControlTemplate TargetType="{x:Type ScrollViewer}">
  <Grid SnapsToDevicePixels="True">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>
      <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Border Grid.Row="1"
            Grid.Column="0">
      <ScrollContentPresenter Margin="{TemplateBinding Padding}"/>
    </Border>
    <RepeatButton
                  Style="{StaticResource MenuScrollButton}"
                  Grid.Row="0"
                  Grid.Column="0"
                  Command="{x:Static ScrollBar.LineUpCommand}"
                  CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                  Focusable="False">
      <RepeatButton.Visibility>
        <MultiBinding FallbackValue="Visibility.Collapsed"
                      Converter="{StaticResource MenuScrollingVisibilityConverter}"
                      ConverterParameter="0">
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="ComputedVerticalScrollBarVisibility"/>
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="VerticalOffset"/>
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="ExtentHeight"/>
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="ViewportHeight"/>
        </MultiBinding>
      </RepeatButton.Visibility>
      <Path Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"
            Data="{StaticResource UpArrow}"/>
    </RepeatButton>
    <RepeatButton
                  Style="{StaticResource MenuScrollButton}"
                  Grid.Row="2"
                  Grid.Column="0"
                  Command="{x:Static ScrollBar.LineDownCommand}"
                  CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                  Focusable="False">
      <RepeatButton.Visibility>
        <MultiBinding FallbackValue="Visibility.Collapsed"
                      Converter="{StaticResource MenuScrollingVisibilityConverter}"
                      ConverterParameter="100">
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="ComputedVerticalScrollBarVisibility"/>
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="VerticalOffset"/>
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="ExtentHeight"/>
          <Binding RelativeSource="{RelativeSource TemplatedParent}"
                   Path="ViewportHeight"/>
        </MultiBinding>
      </RepeatButton.Visibility>
      <Path Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"
            Data="{StaticResource DownArrow}"/>
    </RepeatButton>
  </Grid>
</ControlTemplate>

System.Object
  System.Windows.Controls.MenuScrollingVisibilityConverter

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0

Community Additions

ADD
Show:
© 2014 Microsoft