Descubierto la manera de ocultar los puntos de agarre en el lado izquierdo, ahora ¿cómo puedo ocultar que agregar/quitar botones de flecha de lista desplegable en el lado derecho?

OriginalEl autor mpen | 2011-01-11

5 Comentarios

  1. 21

    Google se completa con la respuesta a esto:

    private void ToolBar_Loaded(object sender, RoutedEventArgs e)
    {
        ToolBar toolBar = sender as ToolBar;
        var overflowGrid = toolBar.Template.FindName("OverflowGrid", toolBar) as FrameworkElement;
        if (overflowGrid != null)
        {
                overflowGrid.Visibility = Visibility.Collapsed;
        }
    
        var mainPanelBorder = toolBar.Template.FindName("MainPanelBorder", toolBar) as FrameworkElement;
        if (mainPanelBorder != null)
        {
            mainPanelBorder.Margin = new Thickness(0);
        }
    }

    Y asignar este método a la barra de herramientas Cargado de eventos.

    Trató de buscar en google, no podía encontrarlo. Y esto deja un hueco en el lado derecho, donde el botón una vez fue… de todas formas para arreglar eso?
    La brecha OverflowMode="Never" debe eliminar si recuerdo bien.
    Lo que una propiedad? ¿Dónde lo puse? Editar: no hace nada. La encontró. Pero no elimina la brecha.
    He actualizado mi respuesta para eliminar la brecha, la brecha fue debido a la margen del panel principal.
    Así, la filosofía que dice que es, de hecho, chapucero, pero eliminando el botón de desbordamiento es simplemente que no están expuestos a través de una propiedad (como con la izquierda agarre). Eso significa que la apariencia de haber sido diseñadas para la barra de herramientas no era la intención de perder el desbordamiento del componente. Para deshacerse de él, usted necesita para definir un nuevo estilo/buscar de la barra de herramientas, una mirada que no tiene el desbordamiento y esto implica una reescritura de la todo de la plantilla de control (como H. B. propuesta), pero vas a tener que incluir en la plantilla a todos los de la barra de herramientas de la funcionalidad. FindName no es chapucero por sí mismo (de hecho, muy a menudo es utilizado en el control personalizado de desarrollo).

    OriginalEl autor Andrei Pana

  2. 5

    Edición: Cerrado la brecha demasiado.

    Edit2: Fijo de los recursos que faltan.

    Alternativamente, usted puede usar una copia del estilo de los mencionados anteriormente, la visibilidad cambiado y el margen de la derecha eliminado, todos esos recursos pertenecen al estilo/plantilla:

        <LinearGradientBrush x:Key="ToolBarHorizontalBackground" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFFFFF" Offset="0"/>
    <GradientStop Color="#FFFBFF" Offset="0.5"/>
    <GradientStop Color="#F7F7F7" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ToolBarToggleButtonVerticalBackground" EndPoint="1,0" StartPoint="0,0">
    <GradientStop Color="#ECECEC" Offset="0"/>
    <GradientStop Color="#DDDDDD" Offset="0.5"/>
    <GradientStop Color="#A0A0A0" Offset="1"/>
    </LinearGradientBrush>
    <SolidColorBrush x:Key="ToolBarButtonHover" Color="#C2E0FF"/>
    <SolidColorBrush x:Key="ToolBarGripper" Color="#C6C3C6"/>
    <Style x:Key="ToolBarVerticalOverflowButtonStyle" TargetType="{x:Type ToggleButton}">
    <Setter Property="Background" Value="{StaticResource ToolBarToggleButtonVerticalBackground}"/>
    <Setter Property="MinHeight" Value="0"/>
    <Setter Property="MinWidth" Value="0"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type ToggleButton}">
    <Border x:Name="Bd" Background="{TemplateBinding Background}" CornerRadius="0,0,3,3" SnapsToDevicePixels="true">
    <Canvas HorizontalAlignment="Right" Height="6" Margin="2,7,2,2" SnapsToDevicePixels="true" VerticalAlignment="Bottom" Width="7">
    <Path Data="M 1.5 1 L 1.5 6" Stroke="White"/>
    <Path Data="M 0.5 0 L 0.5 5" Stroke="{TemplateBinding Foreground}"/>
    <Path Data="M 3.5 0.5 L 7 3.5 L 4 6.5 Z" Fill="White"/>
    <Path Data="M 3 -0.5 L 6 2.5 L 3 5.5 Z" Fill="{TemplateBinding Foreground}"/>
    </Canvas>
    </Border>
    <ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
    <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
    </Trigger>
    <Trigger Property="IsKeyboardFocused" Value="true">
    <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
    </Trigger>
    <Trigger Property="IsEnabled" Value="false">
    <Setter Property="Foreground" Value="{StaticResource ToolBarGripper}"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    <Style.Triggers>
    <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
    </DataTrigger>
    </Style.Triggers>
    </Style>
    <LinearGradientBrush x:Key="ToolBarVerticalBackground" EndPoint="1,0" StartPoint="0,0">
    <GradientStop Color="#FFFFFF" Offset="0"/>
    <GradientStop Color="#FFFBFF" Offset="0.5"/>
    <GradientStop Color="#F7F7F7" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ToolBarToggleButtonHorizontalBackground" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#ECECEC" Offset="0"/>
    <GradientStop Color="#DDDDDD" Offset="0.5"/>
    <GradientStop Color="#A0A0A0" Offset="1"/>
    </LinearGradientBrush>
    <Style x:Key="ToolBarHorizontalOverflowButtonStyle" TargetType="{x:Type ToggleButton}">
    <Setter Property="Background" Value="{StaticResource ToolBarToggleButtonHorizontalBackground}"/>
    <Setter Property="MinHeight" Value="0"/>
    <Setter Property="MinWidth" Value="0"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type ToggleButton}">
    <Border x:Name="Bd" Background="{TemplateBinding Background}" CornerRadius="0,3,3,0" SnapsToDevicePixels="true">
    <Canvas HorizontalAlignment="Right" Height="7" Margin="7,2,2,2" SnapsToDevicePixels="true" VerticalAlignment="Bottom" Width="6">
    <Path Data="M 1 1.5 L 6 1.5" Stroke="White"/>
    <Path Data="M 0 0.5 L 5 0.5" Stroke="{TemplateBinding Foreground}"/>
    <Path Data="M 0.5 4 L 6.5 4 L 3.5 7 Z" Fill="White"/>
    <Path Data="M -0.5 3 L 5.5 3 L 2.5 6 Z" Fill="{TemplateBinding Foreground}"/>
    </Canvas>
    </Border>
    <ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
    <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
    </Trigger>
    <Trigger Property="IsKeyboardFocused" Value="true">
    <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
    </Trigger>
    <Trigger Property="IsEnabled" Value="false">
    <Setter Property="Foreground" Value="{StaticResource ToolBarGripper}"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    <Style.Triggers>
    <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
    </DataTrigger>
    </Style.Triggers>
    </Style>
    <SolidColorBrush x:Key="ToolBarMenuBorder" Color="#808080"/>
    <SolidColorBrush x:Key="ToolBarSubMenuBackground" Color="#FDFDFD"/>
    <Style x:Key="ToolBarThumbStyle" TargetType="{x:Type Thumb}">
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type Thumb}">
    <Border Background="Transparent" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
    <Rectangle>
    <Rectangle.Fill>
    <DrawingBrush TileMode="Tile" Viewbox="0,0,4,4" Viewport="0,0,4,4" ViewportUnits="Absolute" ViewboxUnits="Absolute">
    <DrawingBrush.Drawing>
    <DrawingGroup>
    <GeometryDrawing Brush="White" Geometry="M 1 1 L 1 3 L 3 3 L 3 1 z"/>
    <GeometryDrawing Brush="{StaticResource ToolBarGripper}" Geometry="M 0 0 L 0 2 L 2 2 L 2 0 z"/>
    </DrawingGroup>
    </DrawingBrush.Drawing>
    </DrawingBrush>
    </Rectangle.Fill>
    </Rectangle>
    </Border>
    <ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
    <Setter Property="Cursor" Value="SizeAll"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>
    <Style x:Key="ToolBarMainPanelBorderStyle" TargetType="{x:Type Border}">
    <Setter Property="Margin" Value="0,0,11,0"/>
    <Setter Property="CornerRadius" Value="3,3,3,3"/>
    <Style.Triggers>
    <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
    <Setter Property="CornerRadius" Value="0,0,0,0"/>
    </DataTrigger>
    </Style.Triggers>
    </Style>
    <Style x:Key="ToolBarWithoutOverflowBarStyle" TargetType="{x:Type ToolBar}">
    <Setter Property="Background" Value="{StaticResource ToolBarHorizontalBackground}"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type ToolBar}">
    <Grid x:Name="Grid" Margin="3,1,1,1" SnapsToDevicePixels="true">
    <Grid x:Name="OverflowGrid" HorizontalAlignment="Right" Visibility="Hidden">
    <ToggleButton x:Name="OverflowButton" ClickMode="Press" FocusVisualStyle="{x:Null}" IsChecked="{Binding IsOverflowOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" IsEnabled="{TemplateBinding HasOverflowItems}" Style="{StaticResource ToolBarHorizontalOverflowButtonStyle}"/>
    <Popup x:Name="OverflowPopup" AllowsTransparency="true" Focusable="false" IsOpen="{Binding IsOverflowOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom" StaysOpen="false">
    <Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent">
    <Border x:Name="ToolBarSubMenuBorder" BorderBrush="{StaticResource ToolBarMenuBorder}" BorderThickness="1" Background="{StaticResource ToolBarSubMenuBackground}" RenderOptions.ClearTypeHint="Enabled">
    <ToolBarOverflowPanel x:Name="PART_ToolBarOverflowPanel" KeyboardNavigation.DirectionalNavigation="Cycle" FocusVisualStyle="{x:Null}" Focusable="true" Margin="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle" WrapWidth="200"/>
    </Border>
    </Microsoft_Windows_Themes:SystemDropShadowChrome>
    </Popup>
    </Grid>
    <Border x:Name="MainPanelBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" Style="{StaticResource ToolBarMainPanelBorderStyle}" Margin="0">
    <DockPanel KeyboardNavigation.TabIndex="1" KeyboardNavigation.TabNavigation="Local">
    <Thumb x:Name="ToolBarThumb" Margin="-3,-1,0,0" Padding="6,5,1,6" Style="{StaticResource ToolBarThumbStyle}" Width="10"/>
    <ContentPresenter x:Name="ToolBarHeader" ContentSource="Header" HorizontalAlignment="Center" Margin="4,0,4,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
    <ToolBarPanel x:Name="PART_ToolBarPanel" IsItemsHost="true" Margin="0,1,2,2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </DockPanel>
    </Border>
    </Grid>
    <ControlTemplate.Triggers>
    <Trigger Property="IsOverflowOpen" Value="true">
    <Setter Property="IsEnabled" TargetName="ToolBarThumb" Value="false"/>
    </Trigger>
    <Trigger Property="Header" Value="{x:Null}">
    <Setter Property="Visibility" TargetName="ToolBarHeader" Value="Collapsed"/>
    </Trigger>
    <Trigger Property="ToolBarTray.IsLocked" Value="true">
    <Setter Property="Visibility" TargetName="ToolBarThumb" Value="Collapsed"/>
    </Trigger>
    <Trigger Property="HasDropShadow" SourceName="OverflowPopup" Value="true">
    <Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
    <Setter Property="SnapsToDevicePixels" TargetName="Shdw" Value="true"/>
    <Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
    </Trigger>
    <Trigger Property="Orientation" Value="Vertical">
    <Setter Property="Margin" TargetName="Grid" Value="1,3,1,1"/>
    <Setter Property="Style" TargetName="OverflowButton" Value="{StaticResource ToolBarVerticalOverflowButtonStyle}"/>
    <Setter Property="Height" TargetName="ToolBarThumb" Value="10"/>
    <Setter Property="Width" TargetName="ToolBarThumb" Value="Auto"/>
    <Setter Property="Margin" TargetName="ToolBarThumb" Value="-1,-3,0,0"/>
    <Setter Property="Padding" TargetName="ToolBarThumb" Value="5,6,6,1"/>
    <Setter Property="Margin" TargetName="ToolBarHeader" Value="0,0,0,4"/>
    <Setter Property="Margin" TargetName="PART_ToolBarPanel" Value="1,0,2,2"/>
    <Setter Property="DockPanel.Dock" TargetName="ToolBarThumb" Value="Top"/>
    <Setter Property="DockPanel.Dock" TargetName="ToolBarHeader" Value="Top"/>
    <Setter Property="HorizontalAlignment" TargetName="OverflowGrid" Value="Stretch"/>
    <Setter Property="VerticalAlignment" TargetName="OverflowGrid" Value="Bottom"/>
    <Setter Property="Placement" TargetName="OverflowPopup" Value="Right"/>
    <Setter Property="Margin" TargetName="MainPanelBorder" Value="0,0,0,11"/>
    <Setter Property="Background" Value="{StaticResource ToolBarVerticalBackground}"/>
    </Trigger>
    <Trigger Property="IsEnabled" Value="false">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    <Style.Triggers>
    <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
    </DataTrigger>
    </Style.Triggers>
    </Style>

    Después incrustados que en algún lugar se puede establecer el estilo de la barra de herramientas:

    <ToolBar Style="{DynamicResource ToolBarWithoutOverflowBarStyle}"/>
    Wow… no puedo creer que requiere de mucho trabajo para tener un plano de la barra de herramientas.
    Si usted no desea que el agarre y la lista desplegable, ¿por qué estás usando una barra de herramientas? Usted podría utilizar un panel de algún tipo.
    No es mucho si se tiene la Expresión de la Mezcla, se puede extraer la plantilla por defecto, que es lo que yo hice aquí. La mezcla es bastante útil para las plantillas, estilos y similares.

    OriginalEl autor H.B.

  3. 5

    Asignar método siguiente a la barra de herramientas SizeChanged evento.

        private void ToolBar_SizeChanged(object sender, SizeChangedEventArgs e)
    {
    ToolBar toolBar = sender as ToolBar;
    var overflowGrid = toolBar.Template.FindName("OverflowGrid", toolBar) as FrameworkElement;
    if (overflowGrid != null)
    {
    overflowGrid.Visibility = toolBar.HasOverflowItems ? Visibility.Visible : Visibility.Collapsed;
    }
    var mainPanelBorder = toolBar.Template.FindName("MainPanelBorder", toolBar) as FrameworkElement;
    if (mainPanelBorder != null)
    {
    var defaultMargin = new Thickness(0, 0, 11, 0);
    mainPanelBorder.Margin = toolBar.HasOverflowItems ?defaultMargin: new Thickness(0);
    }
    }
    esto funciona perfecto para horizontal de barras de herramientas. para las barras de herramientas en la flecha que aparece debajo de la última botón, pero al lado (a la derecha, si la barra de herramientas en el lado izquierdo de la ventana).
    en el caso de la Orientación.Vertical en el margen debe ser de Espesor(0, 0, 0, 11)

    OriginalEl autor Amit Pawar

  4. 2

    No estoy muy seguro de que usted realmente necesita una barra de herramientas o el tipo de un componente se ve como una barra de menú. Aquí es justo lo que yo quiero:

    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Menu Grid.Row="0">
    <MenuItem Header="Menu1" Padding="10 4">
    <MenuItem Header="MenuItem1"/>
    <MenuItem Header="MenuItem2"/>
    </MenuItem>
    <MenuItem Header="Menu2" Padding="10 4">
    <MenuItem Header="MenuItem1"/>
    <MenuItem Header="MenuItem2"/>
    </MenuItem>
    </Menu>
    <...>
    </Grid>

    Es posible que no se ajuste a su caso. Sólo me gustaría compartir la mía.

    OriginalEl autor Raye

  5. 0

    He búsqueda de cuatro horas para hacer esto correctamente con MVVM (así que no hay código de detrás).

    La más importante es la «visibilidad colapsado» después de ToggleButton y después de ToolBarOverflowPanel (tengo el color de fondo a negro para mi nav ejemplo).

    Cómo ocultar la flecha en el lado derecho de la Barra de herramientas?

    Aquí está el código que se pueden establecer en la barra de herramientas por "<toolbar Style="{StaticResource ToolBar}" Background="Black">...</ToolBar>

    Aquí está el código para el estilo:

        <Style x:Key="Toolbar" TargetType="{x:Type ToolBar}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type ToolBar}">
    <Border x:Name="Border"  CornerRadius="2" BorderThickness="1" Background="Black" BorderBrush="Black">
    <DockPanel >
    <ToggleButton Visibility="Collapsed"  DockPanel.Dock="Right" IsEnabled="False" IsChecked="False" ClickMode="Press">
    <Popup x:Name="OverflowPopup" AllowsTransparency="true" Placement="Bottom" IsOpen="{Binding Path=IsOverflowOpen,RelativeSource={RelativeSource TemplatedParent}}" StaysOpen="false" Focusable="false" PopupAnimation="Slide">
    <Border x:Name="DropDownBorder" Background="pink" BorderThickness="1" BorderBrush="pink">
    <ToolBarOverflowPanel x:Name="PART_ToolBarOverflowPanel" Margin="2" WrapWidth="200" Focusable="true"  FocusVisualStyle="{x:Null}" KeyboardNavigation.TabNavigation="Cycle" KeyboardNavigation.DirectionalNavigation="Cycle" Visibility="Collapsed"/>
    </Border>
    </Popup>
    </ToggleButton>
    <ToolBarPanel x:Name="PART_ToolBarPanel" IsItemsHost="true" Margin="0,1,2,2"/>
    </DockPanel>
    </Border>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>

    OriginalEl autor AxelPauwels

Dejar respuesta

Please enter your comment!
Please enter your name here