WPF 도구 모음: 그립 및 오버플로 제거 방법
중첩된 WPF ToolBarPanel-ToolBar-Menu에서 왼쪽 그립 핸들과 오른쪽 오버플로 영역을 제거하려고 합니다.둘 다 회색으로 표시되어 있습니다만, 전혀 표시하지 말아 주세요.
어떻게 해야 할지 생각나는 거 없어?
내 용어가 완전히 정확하지 않은 경우를 대비해서 아래 링크의 그림 3에 있는 이미지를 보면 드롭다운 왼쪽과 오른쪽 끝에 있는 그립이 있습니다.
부착된 속성을 설정하여 그립을 제거할 수 있습니다.ToolBarTray.IsLocked="True"
도구 모음에 있습니다.
Overflow Toggle Button을 제거하려면 6글자 변수에서 제안하는 대로 사용자 정의 ControlTemplate에서 삭제해야 합니다. Blend 3 Preview를 혼합하거나 다운로드할 수 있는 경우 이 작업은 그다지 어렵지 않습니다.
툴바가 로드된 경우 버튼을 숨길 수도 있습니다.단, 어떤 경로를 선택하든 연결된 속성을 설정해야 합니다.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 Toggle Button을 collapse로 설정합니다.
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();
}
}
새 제어 템플릿을 제공하지 않고 오버플로우를 제거할 수 있습니다.ToolBar
오른쪽 여백이 음수인 경우(왼쪽 여백이 음수인 경우 왼쪽 여백이 음수인 경우 왼쪽 여백이 동그랗게 되어도 이상하게 보이지 않도록 오른쪽 여백이 음수인 경우).그 후 추가한다.ClipToBounds="True"
에게ToolBarPanel
툴바의 가장자리가 잘라져 패널 영역 밖에 돌출되어 있습니다.
<ToolBarPanel Grid.Row="0" ClipToBounds="True">
<ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
. . .
Blend를 사용하면 도구 모음 패널, 메뉴 또는 도구 모음에 대한 ControlTemplate를 간단히 재정의할 수 있습니다.
- 툴바를 우클릭하여 [Edit Template]를 선택합니다.
- 템플릿 편집에서 사본 편집을 선택합니다.
- 리소스 사전에 복사본을 추가하는 것이 좋습니다.
- [확인] 을 클릭합니다.
이제 ToolBarPanel의 제어 템플릿을 편집하고 그립 및 오버플로우 신호에 대한 가시성을 Collapsed로 설정할 수 있습니다.다른 컨트롤에 대해 헹구고 반복할 수 있습니다.시간이 좀 걸리지만 Blend는 그다지 어렵지 않습니다.
오버플로우 버튼을 완전히 숨기는 것보다 필요할 때만 보여주는 것이 좋다고 생각합니다.이 작업은 다음을 바인딩하여 수행할 수 있습니다.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>
를 선택합니다.툴바(또는 툴바 트레이를 사용하고 있는 경우는 툴바 트레이) 뒤에 위 내용을 배치합니다.
단추에 필요한 폭과 높이를 사용하십시오.
Kaxaml은 이 물건을 가지고 놀기에 아주 좋다.
언급URL : https://stackoverflow.com/questions/1050953/wpf-toolbar-how-to-remove-grip-and-overflow
'programing' 카테고리의 다른 글
Git 및 고약한 "오류: 기존 정보/참조를 잠글 수 없습니다" (0) | 2023.04.20 |
---|---|
'pure' Swift에서 약한 프로토콜 참조를 만드는 방법(@objc 없음) (0) | 2023.04.20 |
왜 항상 '--set-upstream'을 해야 하나요? (0) | 2023.04.15 |
커스텀 함수를 사용하여 C#에서 Excel /xlsm 워크북을 저장하지 않고 닫는 방법 (0) | 2023.04.15 |
파라미터가 있는 Invoke-WebRequest, POST (0) | 2023.04.15 |