2つのチェックボックスに基づいてコントロールを無効または有効にする必要があるフォームで作業しています。このシナリオは、約8種類のグリッドで必要とされます。私はC#を無効にしてコントロールを有効にしていますが、正常に動作しています。 8つのグリッドすべてで同じ方法を使用するにはどうすればよいですか? 私が試した最初のオプションは、親グリッドを取得することでしたが、別のグリッド内にあれば失敗します。WPFは、チェックボックスイベントにパラメータとしてグリッド名を渡すことが可能です
他のオプションは、可能であればグリッドをパラメータとして渡すことです。 可能かどうか、私に教えてください。また、これを達成するためのより良い方法があるかどうかを教えてください。
更新:私が言うことを忘れていることの1つは、チェックボックスを無効にするべきではなく、他のすべてのコントロールとそれが原因であるということです。また、グリッド全体を無効にすることは解決策ではありません。
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#コード、拡張メソッド:
私は、次のような何かを行うことができるようにしたいの後ろXAMLコードで今すぐ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);
}
:
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);
}
}
これまで持っていたXAMLのサンプルを含めることはできますか? –