অন্যান্য সমস্ত নিয়ন্ত্রণের উপরে ওভারলে নিয়ন্ত্রণ কীভাবে করবেন?


166

আমার নিয়ন্ত্রণ অন্য সমস্ত নিয়ন্ত্রণের উপরে প্রদর্শিত হওয়া দরকার, সুতরাং এটি আংশিকভাবে সেগুলি ওভারলে করে।

উত্তর:


161

আপনি যদি কোনও Canvasবা Gridআপনার বিন্যাসে ব্যবহার করছেন তবে উপরের দিকে আরও উপরে রাখার জন্য নিয়ন্ত্রণটি দিন ZIndex

এমএসডিএন থেকে :

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="ZIndex Sample">
  <Canvas>
    <Rectangle Canvas.ZIndex="3" Width="100" Height="100" Canvas.Top="100" Canvas.Left="100" Fill="blue"/>
    <Rectangle Canvas.ZIndex="1" Width="100" Height="100" Canvas.Top="150" Canvas.Left="150" Fill="yellow"/>
    <Rectangle Canvas.ZIndex="2" Width="100" Height="100" Canvas.Top="200" Canvas.Left="200" Fill="green"/>

    <!-- Reverse the order to illustrate z-index property -->

    <Rectangle Canvas.ZIndex="1" Width="100" Height="100" Canvas.Top="300" Canvas.Left="200" Fill="green"/>
    <Rectangle Canvas.ZIndex="3" Width="100" Height="100" Canvas.Top="350" Canvas.Left="150" Fill="yellow"/>
    <Rectangle Canvas.ZIndex="2" Width="100" Height="100" Canvas.Top="400" Canvas.Left="100" Fill="blue"/>
  </Canvas>
</Page>

আপনি যদি নির্দিষ্ট না করেন ZIndexতবে প্যানেলের বাচ্চাগুলি তাদের নির্দিষ্ট করে দেওয়া ক্রমে রেন্ডার করা হয় (অর্থাত্ শেষটি শীর্ষে)।

আপনি যদি আরও জটিল কিছু করতে চাইছেন তবে ChildWindowসিলভারলাইটে কীভাবে প্রয়োগ করা হয়েছে তা আপনি দেখতে পারেন । এটি সম্পূর্ণরূপে একটি অর্ধেক স্বচ্ছ পটভূমি এবং পপআপকে ওভারলে করে RootVisual


দ্রষ্টব্য: এটি আমার প্রত্যাশার মতো HTML ক্যানভাসের মতো নয়। এটি সরাসরি অঙ্কনের জন্য নয়, তবে একটি নিখুঁত অবস্থানের প্রসঙ্গ সরবরাহ করে (আপনি সাধারণত আকারগুলি সরাসরি আকারে রাখবেন)।
পল

73

রবার্ট রসনির একটি ভাল সমাধান রয়েছে। অতীতে আমি ব্যবহার করেছি এমন বিকল্প সমাধান যা বাকী সামগ্রী থেকে "ওভারলে" আলাদা করে। এই সমাধানটি Panel.ZIndexঅন্য সমস্ত কিছুর উপরে "ওভারলে" রাখার জন্য সংযুক্ত সম্পত্তিটির সুবিধা গ্রহণ করে । আপনি কোডটিতে "ওভারলে" এর দৃশ্যমানতা সেট করতে পারেন বা একটি ব্যবহার করতে পারেন DataTrigger

<Grid x:Name="LayoutRoot">

 <Grid x:Name="Overlay" Panel.ZIndex="1000" Visibility="Collapsed">
    <Grid.Background>
      <SolidColorBrush Color="Black" Opacity=".5"/>
    </Grid.Background>

    <!-- Add controls as needed -->
  </Grid>

  <!-- Use whatever layout you need -->
  <ContentControl x:Name="MainContent" />

</Grid>

এই ওভারলেটি কেবল একটি নির্দিষ্ট অঞ্চল নয় পুরো উইন্ডোটি coverেকে দেবে।
মেট্রো স্মুরফ

সর্বকালের সেরা সমাধান! ধন্যবাদ!
বিকাশকারী

খুব সামান্য কোড সহ আমার সম্পূর্ণ অ্যাপ্লিকেশন উইন্ডোতে (যেমন, ব্যবহারকারী যদি তার ডেস্ক থেকে দূরে চলে যান তবে সংবেদনশীল তথ্য লুকিয়ে রাখার জন্য) আমার ঠিক কী দরকার ছিল। অসাধারণ!
হুইটজ

39

গ্রিডের একই কক্ষের নিয়ন্ত্রণগুলি পিছনে-সামনের দিকে রেন্ডার হয়। সুতরাং অন্যের উপরে একটি নিয়ন্ত্রণ স্থাপনের একটি সহজ উপায় হ'ল এটি একই ঘরে।

এখানে একটি কার্যকর উদাহরণ রয়েছে, যা একটি দীর্ঘক্ষণ চলমান কার্য সম্পাদন করার সময় (যেমন BusyMessageসীমাবদ্ধ সম্পত্তিটি নাল নয়) ব্যস্ত বার্তা সহ দৃশ্যে সমস্ত কিছু (যেমন ব্যবহারকারী নিয়ন্ত্রণ) অক্ষম করে এমন একটি প্যানেলকে পপ আপ করে :

<Grid>

    <local:MyUserControl DataContext="{Binding}"/>

    <Grid>
        <Grid.Style>
            <Style TargetType="Grid">
                <Setter Property="Visibility"
                        Value="Visible" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding BusyMessage}"
                                 Value="{x:Null}">
                        <Setter Property="Visibility"
                                Value="Collapsed" />
                    </DataTrigger>

                </Style.Triggers>
            </Style>
        </Grid.Style>
        <Border HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch"
                Background="DarkGray"
                Opacity=".7" />
        <Border HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Background="White"
                Padding="20"
                BorderBrush="Orange"
                BorderThickness="4">
            <TextBlock Text="{Binding BusyMessage}" />
        </Border>
    </Grid>
</Grid>

23

আপনার এক্সএএমএল কোডের শেষে আপনি যে নিয়ন্ত্রণটি সামনে আনতে চান তা রাখুন। অর্থাত

<Grid>
  <TabControl ...>
  </TabControl>
  <Button Content="ALways on top of TabControl Button"/>
</Grid>

13

এটি ডাব্লুপিএফ-অ্যাডোনার্সের একটি সাধারণ কাজ । অ্যাডোনাররা সাধারণত অন্য সমস্ত নিয়ন্ত্রণের উপরে উপস্থিত হয় তবে জেড-অর্ডার উল্লেখ করা অন্যান্য উত্তরগুলি আপনার ক্ষেত্রে আরও ভাল ফিট করতে পারে।


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