今天开发时,同事问我一个问题。怎么去除ToolBar右边扩展图标。我想了一下,说改Style。同事说太麻烦了。可不可以快速修正。我说应该动态去读取Template模板中的Style,然后隐藏。怎么实现那?

 

第一步,分析现有的ToolBar的样式(Style)

 

<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>

 

2,找到对应的控件,隐藏 OverflowGridMainPanelBorder

 


Toolbar bar = new Toolbar();

Bar.Loaded 
+= new EventHandler();

 


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);

            }

        }

 

posted on 2011-05-19 17:01  geewu  阅读(7392)  评论(0编辑  收藏  举报