101

ネストされたWPFToolBarPanel-ToolBar-Menuで、左側のグリップハンドルと右側のオーバーフロー領域を削除します。どちらもグレー表示されていますが、まったく表示されないようにしたいと思います。

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

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

ツールバーの画像

4

6 に答える 6

164

ToolBarTray.IsLocked="True"ツールバーに添付プロパティを設定することで、グリップを削除できます。

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

ToolBarのloadedイベントでボタンを非表示にすることもできますが、どちらのルートを選択する場合でもToolBar.OverflowMode="Never"、アイテムが到達不能な領域に誤ってオーバーフローしないように、ToolBarのメニューで添付プロパティを設定する必要があります。

<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();
    }
}
于 2009-06-26T20:57:50.397 に答える
8

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

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

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

于 2009-06-26T20:09:02.710 に答える
8

に負の右マージンを設定することにより、新しいコントロールテンプレートを提供せずにオーバーフローを「削除」できますToolBar(負の左マージンを挿入して、左端が丸くなり、右端が正方形になり、奇妙に見えないようにします)。次に、に追加ClipToBounds="True"しますToolBarPanel。これにより、パネルの領域の外側に張り付いているツールバーのエッジが切り取られます。

<ToolBarPanel Grid.Row="0" ClipToBounds="True">
    <ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
    . . .
于 2014-11-26T15:48:29.820 に答える
6

オーバーフローボタンを完全に非表示にするのではなく、必要な場合にのみ表示する方がよいと思います。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でも同じことができます)

于 2015-09-03T15:24:50.463 に答える
3

WPFを使い始めたばかりで、オーバーフロー矢印を非表示にする上記のメソッドを取得できませんでした(Visual Studio 2010)。矢印に影響を与えたと思われるのは、上記のToolbar_Loadの例だけでしたが、矢印を次のように変更するだけでした。矢印と同じくらいひどく見えた空のスペース。私が理解できる最も簡単な方法は、ツールバーの余白を設定することでした。

<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>
于 2013-08-18T17:54:57.977 に答える
0

上記の方法は、オーバーフローを隠すために機能します。グリッパーを非表示にするために、以下を使用しました。

         <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はこのようなもので遊ぶのに最適です。

于 2013-04-14T17:40:04.567 に答える