중첩 된 WPF ToolBarPanel-ToolBar-Menu에서 왼쪽의 그립 핸들과 오른쪽의 오버플로 영역을 제거하려고합니다. 둘 다 회색으로 표시되지만 전혀 표시하지 않기를 바랍니다.
그것을 달성하는 방법에 대한 아이디어가 있습니까?
내 용어가 완전히 정확하지 않은 경우를 대비하여 아래 링크의 그림 3에있는 이미지를 보면 세 개의 도구 모음 중 가장 낮은 곳에 드롭 다운 왼쪽과 맨 오른쪽 오른쪽에 그립이 있습니다. 버튼에 오버플로가 있습니다.
답변
ToolBarTray.IsLocked="True"
도구 모음 에서 연결된 속성 을 설정하여 그립을 제거 할 수 있습니다 .
Overflow ToggleButton 을 제거하려면 sixlettervariables가 제안하는대로 사용자 지정 ControlTemplate에서 제거해야합니다. 블렌드가 있거나 Blend 3 미리보기를 다운로드 할 수 있다면 그렇게 어렵지 않습니다.
도구 모음의로드 된 이벤트에서 버튼을 숨길 수도 있지만 어떤 경로를 선택하든 도구 모음 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>
그리고 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();
}
}
답변
Blend를 사용 하여 ToolBarPanel, Menu 또는 ToolBar 의 ControlTemplate 을 간단히 재정의 할 수 있습니다 .
- 도구 모음을 마우스 오른쪽 버튼으로 클릭하고 템플릿 편집을 선택합니다.
- 템플릿 편집에서 복사본 편집을 선택합니다.
- 리소스 사전에 사본을 추가하는 것이 좋습니다.
- 확인을 클릭하십시오.
이제 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 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은이 물건을 가지고 놀기에 탁월합니다.