入れ子になったWPF ToolBarPanel-ToolBar-Menuで、左側のグリップハンドルと右側のオーバーフロー領域を削除します。どちらもグレー表示されていますが、表示されないようにしてください。
それを達成する方法に関するアイデアはありますか?
私の用語が完全に正しくない場合に備えて、下のリンクの図3の画像を見ると、3つのツールバーの一番下に、ドロップダウンの左側と右端の右側にグリップがありますボタンオーバーフローがあります。
入れ子になったWPF ToolBarPanel-ToolBar-Menuで、左側のグリップハンドルと右側のオーバーフロー領域を削除します。どちらもグレー表示されていますが、表示されないようにしてください。
それを達成する方法に関するアイデアはありますか?
私の用語が完全に正しくない場合に備えて、下のリンクの図3の画像を見ると、3つのツールバーの一番下に、ドロップダウンの左側と右端の右側にグリップがありますボタンオーバーフローがあります。
回答:
グリップはToolBarTray.IsLocked="True"
、ツールバーの添付プロパティを設定することで削除できます。
削除するにはオーバーフローのトグルボタンを、あなたはブレンドを持っているか、ブレンド3プレビューが過度に難しいことではありませんダウンロードすることができるかどうかを示唆sixlettervariablesとしてカスタムのControlTemplate、それを削除する必要があります。
ToolBarの読み込まれたイベントでボタンを非表示にすることもできますが、どちらのルートを選択した場合でもToolBar.OverflowMode="Never"
、ToolBarのメニューでattachedプロパティを設定して、アイテムが誤って到達できない領域にオーバーフローしないようにする必要があります。
<ToolBarPanel DockPanel.Dock="Top">
<ToolBar ToolBarTray.IsLocked="True" Loaded="ToolBar_Loaded">
<Menu ToolBar.OverflowMode="Never">
<MenuItem Header="File" />
<MenuItem Header="New" />
</Menu>
</ToolBar>
</ToolBarPanel>
そして、Overflow ToggleButtonを折りたたみに設定します。
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();
}
}
あなたはできるというだけでのControlTemplateをオーバーライドするためにブレンドを使用 ToolBarPanel、メニュー、またはツールバーのために。
これで、ToolBarPanelのコントロールテンプレートを編集し、グリップとオーバーフロー信号の可視性をCollapsedに設定できます。他のコントロールをすすぎ、繰り返すことができます。少し時間がかかりますが、Blendを使用してもそれほど難しくありません。
ToolBar
負の右マージンを持つようにを設定することで、新しいコントロールテンプレートを提供せずにオーバーフローを「削除」できます(負の左マージンを投入して、丸みのある左端ではなく四角い右端で奇妙に見えるようにします)。次に、をパネルの領域の外側に貼り付けられているツールバーの端を切り取るに追加ClipToBounds="True"
しToolBarPanel
ます。
<ToolBarPanel Grid.Row="0" ClipToBounds="True">
<ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
. . .
オーバーフローボタンを完全に非表示にするのではなく、必要な場合にのみ表示することをお勧めします。これは、その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でも同じことができます)
私は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>
上記のメソッドは、オーバーフローを隠すために機能します。以下を使用してグリッパーを非表示にしました。
<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>
垂直レイアウトの場合。上記をToolbar(またはそれを使用している場合はToolbarTray)の後に配置します。
ボタンに必要な幅と高さを使用します。
Kaxamlは、この機能で遊ぶのに最適です。