web-dev-qa-db-ja.com

WPFツールバー:グリップとオーバーフローを削除する方法

ネストされたWPF ToolBarPanel-ToolBar-Menuでは、左側のグリップハンドルと右側のオーバーフロー領域を取り除きます。両方ともグレー表示されていますが、表示されないようにしたいのです。

それを達成する方法についてのアイデアはありますか?

私の用語が完全に正しくない場合に備えて、下のリンクの図3の画像を見ると、3つのツールバーの一番下のドロップダウンの左側と一番右のグリップがあります。ボタンがオーバーフローしています。

ツールバーの画像

92
Tom

グリップを削除するには、添付プロパティToolBarTray.IsLocked="True"ツールバー上。

Overflow ToggleButton を削除するには、sixlettervariablesが示唆するように、カスタムControlTemplateで削除する必要があります。これは、ブレンドがある場合、またはBlend 3プレビューをダウンロードできる場合はそれほど難しくありません。

また、ToolBarのロードされたイベントでボタンを非表示にすることもできますが、どのルートを使用する場合でも、添付プロパティToolBar.OverflowMode="Never"ツールバーのメニューで、アイテムが誤って到達不能な領域にオーバーフローしないようにします。

<ToolBarPanel DockPanel.Dock="Top">
    <ToolBar ToolBarTray.IsLocked="True" Loaded="ToolBar_Loaded">
        <Menu ToolBar.OverflowMode="Never">
            <MenuItem Header="File" />
            <MenuItem Header="New" />
        </Menu>
    </ToolBar>
</ToolBarPanel>

オーバーフロートグルボタンを折りたたみに設定します。

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();
    }
}
144
rmoore

ToolBarPanel、Menu、またはToolBarに対して ControlTemplateを単にオーバーライドするためにBlendを使用する を使用できます。

  1. ツールバーを右クリックし、テンプレートの編集を選択します
  2. テンプレートの編集から、コピーの編集を選択します
  3. リソースディクショナリにコピーを追加することをお勧めします
  4. OKをクリック

これで、ToolBarPanelのコントロールテンプレートを編集し、グリップとオーバーフロー信号の可視性をCollapsedに設定できます。すすいで、他のコントロールを繰り返します。少し時間がかかりますが、Blendでそれほど難しくありません。

8
user7116

ToolBarに負の右マージンを設定することにより、新しいコントロールテンプレートを提供せずにオーバーフローを「削除」できます)。それから加えて ClipToBounds="True"ToolBarPanelに追加します。これにより、パネルの領域外に張り付いているツールバーの端が切り取られます。

<ToolBarPanel Grid.Row="0" ClipToBounds="True">
    <ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
    . . .
6
John Fisher

オーバーフローボタンを完全に非表示にするのではなく、必要な場合にのみ表示する方が良いと思います。これは、そのVisibilityプロパティをIsEnabledプロパティにバインドすることで実行できます。

private static void FixupToolBarOverflowArrow(ToolBar toolBar)
{
    Action fixup = () =>
    {
        var overflowButton = toolBar.Template.FindName("OverflowButton", toolBar) as ButtonBase;
        if (overflowButton != null)
        {
            overflowButton.SetBinding(
                VisibilityProperty,
                new Binding("IsEnabled")
                {
                    RelativeSource = RelativeSource.Self,
                    Converter = new BooleanToVisibilityConverter()
                });
        }
    };

    if (toolBar.IsLoaded)
    {
        fixup();
    }
    else
    {
        RoutedEventHandler handler = null;
        handler = (sender, e) =>
        {
            fixup();
            toolBar.Loaded -= handler;
        };

        toolBar.Loaded += handler;
    }
}

(テンプレートを再定義することにより、XAMLでも同じことができます)

4
Thomas Levesque

私はWPFで始めたばかりで、オーバーフロー矢印を隠す上記のメソッドを取得できませんでした(Visual Studio 2010)。矢印のように悪く見える空のスペース。最も簡単な方法は、ツールバーの余白を設定することでした。

<ToolBar Height="26" 
         Name="toolBar" 
         DockPanel.Dock="Top" 
         ToolBarTray.IsLocked="True" 
         ToolBar.OverflowMode="Never"        <!-- no effect -->
         Margin="0,0,-13,0">                 <!-- worked -->
         <Menu ToolBar.OverflowMode="Never"> <!-- no affect -->
             <MenuItem Header="_File"></MenuItem>
         </Menu>
</ToolBar>
3
Belmiris

上記のメソッドは、オーバーフローを隠します。グリッパーを非表示にするために次を使用しました。

         <Label Height="44" Width="30" Background="{StaticResource CtrlBackground}" Margin="-20,0,0,0"></Label>

水平レイアウトの場合、および

         <Label Height="44" Width="230" Background="{StaticResource CtrlBackground}" Margin="0,-20,0,0" HorizontalAlignment="Left"></Label>

垂直レイアウトの場合。ツールバー(または、使用する場合はToolbarTray)の後に上記を配置します。

ボタンに必要な幅と高さを使用します。

Kaxamlはこのようなもので遊ぶのに最適です。

0
frediano