ডাব্লুপিএফ টুলবার: কীভাবে গ্রিপ এবং ওভারফ্লো অপসারণ করবেন


98

একটি নেস্টেড ডাব্লুপিএফ টুলবারেপ্যানেল-টুলবার-মেনুতে আমরা বাম দিকের গ্রিপ হ্যান্ডেল এবং ডানদিকে ওভারফ্লো অঞ্চলটি থেকে মুক্তি পেতে চাই। তারা উভয় ধূসর হয়, কিন্তু আমরা তাদের এ প্রদর্শিত হবে না যে চাই।

এটি কীভাবে সম্পাদন করতে হবে?

কেবলমাত্র যদি আমার শর্তাবলী সম্পূর্ণরূপে সঠিক না হয় তবে আপনি নীচের লিঙ্কের চিত্র 3-এ চিত্রটি দেখুন, তিনটি টুলবারের সর্বনিম্নে ড্রপডাউনটির বামে এবং ডানদিকের ডানদিকে আঁকড়ে আছে বোতাম ওভারফ্লো আছে।

টুলবারগুলির চিত্র


আপনি সম্ভবত নিয়ন্ত্রণ টেম্পলেটটি ওভাররাইট করে এটি করতে পারেন ... তবে আমি এটির প্রস্তাব দেব না।
অপান্দিত

ডান দিকটি দর্শন ছাড়িয়ে যাওয়ার জন্য আপনি টুলবারে মার্জিন = "0,0, -14,0" রাখতে পারেন। এটি আমি খুঁজে পেয়েছি সবচেয়ে সহজ সমাধান, তবে আমি কেবল একটি একক টুলবার দিয়ে পরীক্ষা করেছি কোনও সরঞ্জামদণ্ডপ্যানেল বা কোনও সরঞ্জামদণ্ডের ভিতরে নয়।
ওয়েইন ব্লস

উত্তর:


153

ToolBarTray.IsLocked="True"টুলবারে সংযুক্ত সম্পত্তি সেট করে গ্রিপটি সরানো যেতে পারে ।

ওভারফ্লো টগলবটন অপসারণ করতে , আপনাকে এটি একটি কাস্টম কন্ট্রোলটেম্পলেটটি সরিয়ে ফেলতে হবে যেমন সিক্সলেটারে ভেরিয়েবলগুলি পরামর্শ দেয়, যদি আপনার মিশ্রণ থাকে বা ব্লেন্ড 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>

এবং ওভারফ্লো টগল বাটনকে ধসে পড়েছে:

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();
    }
}

15
প্রশ্নটি শুরু করে: কেন একটি সরঞ্জামদণ্ড মোটেই ব্যবহার করবেন? বাটনগুলি সহ একটি সাধারণ স্ট্যাকপ্যানেলটি কেন ব্যবহার করবেন না? টুলবার কী সুবিধা দেয়?
জোশ জি

5
জোশের জি এর উত্তরে: আপনি যদি কোনও সাধারণ প্যানেলের (স্ট্যাকপ্যানেল ইত্যাদি) কোনও চিত্র সহ স্বচ্ছ বাটন ব্যবহার করেন তবে এটির একটি সাদা রূপরেখা থাকবে। যদি একটি সরঞ্জাম বারে একই বোতামটি রাখা হয় তবে সাদা রূপরেখা উপস্থিত থাকে না।
ক্রিস বেনিট

4
আপনি যদি এই প্রসঙ্গে একটি সরঞ্জামদণ্ডের উদাহরণস্বরূপ মাউসওভার আচরণ চান তবে এটিও কার্যকর।
গ্রেগ ডি

36
এফওয়াইআই: আপনি একটি সাধারণ স্ট্যাকপ্যানেল ব্যবহার করতে পারেন এবং এখনও সরঞ্জামদণ্ড স্টাইলিং পেতে পারেন। <বাটন স্টাইল = "{স্ট্যাটিক রিসোর্স {x: স্ট্যাটিক টুলবার.বাটন স্টাইলকি}}"> <চিত্র উত্স = "{স্ট্যাটিক রিসোর্স জুমআইএন>"> </ ইমেজ> </ বাটন>
থ্র্যাগ

4
অতিরিক্তভাবে আমি দেখতে পেয়েছি যে আপনি যদি নিজের টুলবারের মধ্যে <মেনু> নিয়ন্ত্রণ ব্যবহার করতে না চান তবে টুলবার.ওভারফ্লোমোড = "কখনই নয়" সম্পত্তিটি আপনার সরঞ্জামদণ্ডের মধ্যে আপনার <বাটন> নিয়ন্ত্রণের মধ্যে সরাসরি সেট করা যেতে পারে। এই প্রভাবটি যে আমি খুঁজছেন ছিল নির্মিত
ফোর্ড

8

টুলবারপ্যানেল, মেনু বা টুলবারের জন্য আপনি কন্ট্রোলটেম্পলেটটি ওভাররাইড করতে বরং মিশ্রণটি ব্যবহার করতে পারেন

  1. টুলবারে ডান ক্লিক করুন এবং সম্পাদনা টেম্পলেট নির্বাচন করুন
  2. সম্পাদনা টেম্পলেট থেকে, একটি অনুলিপি সম্পাদনা করুন নির্বাচন করুন
  3. আমি অনুলিপিটি কোনও উত্স অভিধানে যুক্ত করার পরামর্শ দিচ্ছি
  4. ওকে ক্লিক করুন

আপনি এখন টুলবারপ্যানেলের জন্য নিয়ন্ত্রণ টেম্পলেটটি সম্পাদনা করবেন এবং গ্রিপ এবং ওভারফ্লো সংকেতের জন্য সঙ্কুচিত হয়ে দৃশ্যমানতা সেট করতে পারবেন। আপনি অন্য নিয়ন্ত্রণগুলির জন্য ধুয়ে ফেলতে এবং পুনরাবৃত্তি করতে পারেন। এটি কিছুটা সময়সাপেক্ষ, তবে ব্লেন্ডের সাথে ভয়ঙ্করভাবে শক্ত নয়।


তথ্যের জন্য ধন্যবাদ দুর্ভাগ্যক্রমে মিশ্র 2 এবং vs2008 আমাদের পক্ষে একসাথে ভালভাবে কাজ করছে বলে মনে হচ্ছে না, যখন অন্যটিতে কোড উত্পন্ন কোড নিয়ে কাজ করে তখন অনেকগুলি সমস্যা, সুতরাং আমরা বর্তমানে আমাদের বনাম কোডের নিকটে কোথাও মিশ্রণটি আসতে দিই না;)
টম

4
হ্যাঁ আমরা VS2k8SP1 না আসা পর্যন্ত মোটামুটি ধর্মীয়ভাবে মিশ্রণটি ব্যবহার করেছি। প্রকৃতপক্ষে আমি ভিএস 2 কে 8 ডাব্লুএসএফ সংমিশ্রণে ডাব্লুপিএফ সম্পাদককে শুভেচ্ছা জানাচ্ছি। কোনও কিছুর উপরে ডান ক্লিক করতে এবং 'ইন স্ট্যাকপ্যানেল' বা 'বর্ডার' তে গ্রুপ বলতে সক্ষম হয়ে ওঠার জন্য খুব সুন্দর। খুব খারাপ এমএস তাদের বিভিন্ন অভিজ্ঞতা হতে চায়।
user7116

আমি মনে করি নতুন এক্সএএমএল পাওয়ার খেলনাগুলি এমন একটি বৈশিষ্ট্য যুক্ত করেছে যা আপনাকে গ্রুপ নিয়ন্ত্রণের অনুমতি দেয়। (সম্ভবত এটি MoXAML পাওয়ার খেলনা ...)
8

8

ToolBarNegativeণাত্মক ডান মার্জিন রাখার জন্য সেট করে নতুন নিয়ন্ত্রণ টেম্পলেট সরবরাহ না করে আপনি ওভারফ্লোটি "অপসারণ" করতে পারেন (এবং নেতিবাচক বাম মার্জিনে ফেলে দিন যাতে এটি বৃত্তাকার বাম প্রান্তগুলি নয় তবে বর্গাকার ডান প্রান্তগুলির সাথে বিজোড় লাগে না)। তারপরে, এতে যুক্ত ClipToBounds="True"করুন ToolBarPanelযা সরঞ্জামদণ্ডের প্রান্তগুলি কেটে ফেলবে যা এখন প্যানেলের ক্ষেত্রের বাইরে স্টিক করে চলেছে।

<ToolBarPanel Grid.Row="0" ClipToBounds="True">
    <ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
    . . .

6

ওভারফ্লো বোতামটি সম্পূর্ণরূপে আড়াল করার পরিবর্তে, আমি মনে করি এটি কেবল যখন প্রয়োজন তখনই এটি প্রদর্শন করা ভাল। এটির 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;
    }
}

(টেমপ্লেটটি নতুন করে সংজ্ঞায়িত করে এক্সএএমএলএ একই জিনিস করা যেতে পারে)


3

আমি কেবল ডাব্লুপিএফ দিয়ে শুরু করছি এবং আমার ওভারফ্লো তীরটি লুকানোর জন্য উপরের কোনও পদ্ধতি (ভিজ্যুয়াল স্টুডিও 2010) পেতে পারি নি the একটি খালি স্থান যা তীরের মতো খারাপ দেখাচ্ছে। আমি সবচেয়ে সহজ উপায়টি বুঝতে পারি কেবলমাত্র সরঞ্জামদণ্ডের মার্জিন সেট করা।

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

0

ওভারফ্লো আড়াল করার জন্য উপরের পদ্ধতিগুলি কাজ করে; গ্রিপারটি লুকানোর জন্য আমি নিম্নলিখিতটি ব্যবহার করেছি:

         <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 এই স্টাফ সঙ্গে খেলার জন্য দুর্দান্ত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.