2016-04-08 24 views
0

İki onay kutusuna göre kontrolleri devre dışı bırakmak veya etkinleştirmek için kullanacağım bir form üzerinde çalışıyorum. Bu senaryo yaklaşık 8 farklı ızgarada gereklidir. Denetimleri devre dışı bırakmak/etkinleştirmek için C# yaptım ve bu iyi çalışıyor. Şimdi aynı yöntemi tüm 8 ızgarada nasıl kullanırım? Çalıştırdığım ilk seçenek, ana ızgarayı almaktı, ancak başka bir kılavuzda olması durumunda başarısız olur.WPF, gridname parametresini checkbox olayı için parametre olarak geçirebilir

Diğer bir seçenek, eğer mümkünse, ızgarayı bir parametre olarak iletmektir. Lütfen mümkün olup olmadığını bana bildirin. Bunu başarmanın daha iyi yolları varsa lütfen bana bildirin.

Güncelleme: Onay etmemeyi unuttuğum bir şey, onay kutularının devre dışı bırakılmaması, diğer tüm denetimler ve bu yüzden C# kodunun arkasında durmasıdır. Ayrıca tüm şebekenin devre dışı bırakılması çözüm değildir.

XAML:

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="CatelDemo.Views.Stack" 
     Title="Stack" Height="338" Width="644"> 
    <Grid > 
     <TabControl> 
      <TabItem Name="TabOne"> 
       <Grid x:Name="GridOne"> 
        <CheckBox x:Name="cbOneGridOne" Checked="cbOne_Checked" Unchecked="cbOne_Checked" /> 
        <CheckBox x:Name="cbTwoGridOne" Checked="cbOne_Checked" Unchecked="cbOne_Checked" /> 
        <!-- Other controls that should be disable--> 
       </Grid> 
      </TabItem> 
      <TabItem > 
       <Grid x:Name="GridTwo"> 
        <CheckBox x:Name="cbOneGridTwo" Checked="cbOne_Checked" Unchecked="cbOne_Checked" /> 
        <CheckBox x:Name="cbTwoGridTwo" Checked="cbOne_Checked" Unchecked="cbOne_Checked" /> 
        <!-- Other controls that should be disable--> 
       </Grid> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Window> 

C# Kod, uzatma yöntemleri: XAML kodunda Şimdi

public static void DisableAll(this IEnumerable<Control> input, List<String> filter) 
     { 
      input.Where(c => !filter.Contains(c.Name)).ToList().ForEach(c => c.IsEnabled = false); 
     } 

     public static void EnableAll(this IEnumerable<Control> input, List<String> filter) 
     { 
      input.Where(c => !filter.Contains(c.Name)).ToList().ForEach(c => c.IsEnabled = true); 
     } 

aşağıdaki gibi bir şey yapabilmek istiyorum arkasında:

private void cbOne_Checked(object sender, RoutedEventArgs e) 
     { 
      var filter = getFilter(); 
     var isValid = ValidateChecks(); 
      var controls = sourceGrid.Children.OfType<Control>(); 
      if (!isValid) 
      { 
       controls.DisableAll(filter); 
      } 
      else 
      { 
       controls.EnableAll(filter); 
      } 

     } 
+1

'u kullanarak bunları kontrol etmeniz gerekir. Şimdiye kadar sahip olduğunuz XAML örneğini ekleyebilir misiniz? –

cevap

0

Sadece onay kutularını IsEnabled-Özelliğini ayarlayan bir Stile ekleyin ve bu stili herkes için kullanın. Izgaralar:

<UserControl.Resources> 
    <Style TargetType={x:Type Grid}> 
     <Style.Triggers> 
      <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{ElementName=cb1, Path=IsChecked}" Value="True"> 
         <Condition Binding="{ElementName=cb2, Path=IsChecked}" Value="True"> 
        </MultiDataTrigger.Conditions> 
        <Setter Property="IsEnabled" Value="True" /> 
      </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 

<CheckBox x:Name="cb1" /> 
<CheckBox x:Name="cb2" /> 

Ya bir kaynak olarak bu tarz doğrudan kullanmak ya da ona bir ResourceKey ekleyip açıkça ızgara başına kullanın. Bu stili UserControl olarak ayarlamıştım ancak temel olarak bu stilleri Window veya hatta App düzeyinde ayarlayabilirlerse, bu onay kutularında kullanılabilirlerse, IsChecked Property öğelerini ilgili düzeyde eklediğiniz bir DataContext nesnesine bağlarlar. .

0

DataContext MVVM stilini ayarlayabilir ve checked onay kutularına bağlı kılavuzun enabled özelliğine sahip olabilirsiniz. Bindings

+0

Zaten bunu başardım ve quesiton hatırlıyorum ben farklı DataContexts sahip farklı ızgaraları için geçerli aynı yöntemi istedim. Ayrıca tüm ızgara devre dışı bırakılmalıdır, ancak bazı kontroller. – zulq

İlgili konular