আমার নিয়ন্ত্রণ অন্য সমস্ত নিয়ন্ত্রণের উপরে প্রদর্শিত হওয়া দরকার, সুতরাং এটি আংশিকভাবে সেগুলি ওভারলে করে।
আমার নিয়ন্ত্রণ অন্য সমস্ত নিয়ন্ত্রণের উপরে প্রদর্শিত হওয়া দরকার, সুতরাং এটি আংশিকভাবে সেগুলি ওভারলে করে।
উত্তর:
আপনি যদি কোনও 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
।
রবার্ট রসনির একটি ভাল সমাধান রয়েছে। অতীতে আমি ব্যবহার করেছি এমন বিকল্প সমাধান যা বাকী সামগ্রী থেকে "ওভারলে" আলাদা করে। এই সমাধানটি 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>
গ্রিডের একই কক্ষের নিয়ন্ত্রণগুলি পিছনে-সামনের দিকে রেন্ডার হয়। সুতরাং অন্যের উপরে একটি নিয়ন্ত্রণ স্থাপনের একটি সহজ উপায় হ'ল এটি একই ঘরে।
এখানে একটি কার্যকর উদাহরণ রয়েছে, যা একটি দীর্ঘক্ষণ চলমান কার্য সম্পাদন করার সময় (যেমন 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>
এটি ডাব্লুপিএফ- এ অ্যাডোনার্সের একটি সাধারণ কাজ । অ্যাডোনাররা সাধারণত অন্য সমস্ত নিয়ন্ত্রণের উপরে উপস্থিত হয় তবে জেড-অর্ডার উল্লেখ করা অন্যান্য উত্তরগুলি আপনার ক্ষেত্রে আরও ভাল ফিট করতে পারে।
<Canvas Panel.ZIndex="1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="570">
<!-- YOUR XAML CODE -->
</Canvas>