İ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);
}
}
'u kullanarak bunları kontrol etmeniz gerekir. Şimdiye kadar sahip olduğunuz XAML örneğini ekleyebilir misiniz? –