programing

WPF 도구 모음: 그립 및 오버플로 제거 방법

telecom 2023. 4. 20. 20:00
반응형

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를 간단히 재정의할 수 있습니다.

  1. 툴바를 우클릭하여 [Edit Template]를 선택합니다.
  2. 템플릿 편집에서 사본 편집을 선택합니다.
  3. 리소스 사전에 복사본을 추가하는 것이 좋습니다.
  4. [확인] 을 클릭합니다.

이제 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

반응형