PDA

View Full Version : سوال: محدود كردن فوكوس به يك Container



PetekDincos
چهارشنبه 17 آذر 1389, 15:34 عصر
با سلام
من مي خوام وقتي فوكوس به داخل يك Container مثل Grid و ContentControl و غيره منتقل شد نشه با كليد Tab فوكوس را به خارج از اين Container انتقال داد چيكار بايد بكنم با تشكر :متفکر::متعجب::چشمک:

مهدی فرزاد
چهارشنبه 17 آذر 1389, 15:39 عصر
سلام
من این به ذهنم رسید
میتونید با یک شرط هنگامی که اون مثلا گرید فکوس رو گرفت بگید بقیه کنترل های درون فرم خاصیت IsTabStop و Focusable مربوط به اونها برابر false بشه

PetekDincos
چهارشنبه 17 آذر 1389, 15:45 عصر
اگر امکانش باشه یه راه ساده تر

مهدی فرزاد
چهارشنبه 17 آذر 1389, 17:13 عصر
شما میتونید با استفاده از Triggers و ساختن یک Storyboard این کار رو بکنید
من برای مثال یک فرم درست کردم که 4 textBox داره و وقتی فکوس توی textbox شماره 4 که توی یک StackPanel (برنگ مشکی) هست میره دیگه تکس باکس های دیگه یا تب فکوس نمیگیرن
در حقیقت کد میگه وقتی StackPanel فکوس گرفت بقیه کنترل ها خاصیت IsTabStop رو فالس کنن
برای تست اون در تکس باکس 1 قرار بگیرید و تب رو بزیند
فایل ضمیمه هست
البته من یک خط کد هم ننوشتم این کد ها در Blend و با چند حرکت ساده ایجاد شد:چشمک:)

اینم کد

<Window.Resources>
<Storyboard x:Key="OnGotFocus1">
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(KeyboardNavigation.IsTabStop)" Storyboard.TargetName="textBox">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
</BooleanAnimationUsingKeyFrames>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(KeyboardNavigation.IsTabStop)" Storyboard.TargetName="textBox1">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
</BooleanAnimationUsingKeyFrames>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(KeyboardNavigation.IsTabStop)" Storyboard.TargetName="textBox2">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>


<Window.Triggers>

<EventTrigger RoutedEvent="FocusManager.GotFocus" SourceName="stackPanel">
<BeginStoryboard x:Name="OnGotFocus1_BeginStoryboard" Storyboard="{StaticResource OnGotFocus1}"/>
</EventTrigger>

<EventTrigger RoutedEvent="FocusManager.LostFocus" SourceName="stackPanel">
<RemoveStoryboard BeginStoryboardName="OnGotFocus1_BeginStoryboard"/>
</EventTrigger>

</Window.Triggers>


<Grid x:Name="LayoutRoot">
<StackPanel x:Name="stackPanel" Margin="294,125,155,200" Background="Black">
<TextBox TextWrapping="Wrap" Text="3"/>
</StackPanel>
<TextBox x:Name="textBox" HorizontalAlignment="Right" TextWrapping="Wrap" Text="4" VerticalAlignment="Bottom" Margin="0,0,184.447,116.04" Width="110.553"/>
<TextBox x:Name="textBox1" HorizontalAlignment="Right" TextWrapping="Wrap" Text="1" VerticalAlignment="Top" Margin="0,35,197.447,0" Width="110.553"/>
<TextBox x:Name="textBox2" HorizontalAlignment="Right" TextWrapping="Wrap" Text="2" Margin="0,80,197.447,0" Width="110.553" VerticalAlignment="Top"/>
</Grid>