شريط أدوات WPF:كيفية إزالة القبضة والفائض

StackOverflow https://stackoverflow.com/questions/1050953

  •  20-08-2019
  •  | 
  •  

سؤال

في قائمة WPF ToolBarPanel-ToolBar-Menu المتداخلة، نريد التخلص من المقبض الموجود على اليسار ومنطقة الفائض على اليمين.كلاهما باللون الرمادي، ولكننا نرغب في عدم عرضهما على الإطلاق.

أي أفكار حول كيفية تحقيق ذلك؟

فقط في حالة عدم صحة مصطلحاتي تمامًا، إذا نظرت إلى الصورة في الشكل 3 من الرابط أدناه، في أسفل أشرطة الأدوات الثلاثة، يوجد المقبض على يسار القائمة المنسدلة وعلى يمين أقصى اليمين زر هناك الفائض.

صورة لأشرطة الأدوات

هل كانت مفيدة؟

المحلول

ويمكن إزالة قبضة من خلال تحديد ToolBarTray.IsLocked="True" الملكية تعلق على شريط الأدوات.

لإزالة تجاوز ToggleButton ، سيكون لديك لإزالته في ControlTemplate العرف كما sixlettervariables يقترح، الذي إذا كان لديك مزيج أو يمكن تحميل معاينة مزيج 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>

وتعيين تجاوز 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 لتجاوز ControlTemplate ببساطة لـ ToolBarPanel أو القائمة أو شريط الأدوات.

  1. انقر بزر الماوس الأيمن على شريط الأدوات وحدد تحرير القالب
  2. من تحرير القالب، حدد تحرير نسخة
  3. أوصي بإضافة النسخة إلى قاموس الموارد
  4. انقر فوق موافق

ستقوم الآن بتحرير قالب التحكم الخاص بـ ToolBarPanel، ويمكنك ضبط الرؤية على مطوية للقبضة وإشارة التجاوز.يمكنك الشطف والتكرار لعناصر التحكم الأخرى.إنها تستغرق وقتًا طويلاً بعض الشيء، ولكنها ليست صعبة للغاية مع 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 من خلال إعادة تعريف القالب)

وأنا بدأت للتو مع برنامج الأغذية العالمي وتعذر الحصول على أي من الطرق المذكورة أعلاه لإخفاء بلدي تجاوز السهم (البصرية ستوديو 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>

وللتخطيط عمودي. ضع أعلاه بعد شريط الأدوات (أو ToolbarTray، إذا كان استخدام ذلك)

واستخدام كل ما هو مطلوب العرض والارتفاع عن الأزرار الخاصة بك.

وKaxaml ممتازة للعب مع هذه الاشياء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top