我屏幕上有几个按钮
,点击一个按钮
后,其他所有按钮
都应该被禁用。是否有一种方法可以创建一个单一的方法,并设置启用和禁用所有按钮
,而不是启用和禁用单个按钮
。
我屏幕上有几个按钮
,点击一个按钮
后,其他所有按钮
都应该被禁用。是否有一种方法可以创建一个单一的方法,并设置启用和禁用所有按钮
,而不是启用和禁用单个按钮
。
这种方法假定按钮在同一个网格上,它会反转除点击的按钮以外的每个按钮的启用状态。
MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button_Click" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,43,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button_Click" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,76,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="button_Click" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,109,0,0" Name="button4" VerticalAlignment="Top" Width="75" Click="button_Click" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,142,0,0" Name="button5" VerticalAlignment="Top" Width="75" Click="button_Click" />
</Grid>
</Window>
MainWindow.xaml.cs
private void button_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
foreach (FrameworkElement item in ((Panel)btn.Parent).Children )
{
if (item is Button)
{
if (btn.Name != item.Name)
item.IsEnabled = !item.IsEnabled;
}
}
}
Private Sub ButtonsClick(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles button1.Click ,button2.Click ,button3.Click
button1.IsEnabled = (button1 is sender)
button2.IsEnabled = (button2 is sender)
button3.IsEnabled = (button3 is sender)
End Sub
编辑:我忽略了您不想启用/禁用单个按钮的事实。因此,我建议标记答案。
PreviewMouseLeftButtonDown
事件:void window_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e)
{
Window win = sender as Window;
if (e.OriginalSource is Button)
{
Button btn=(Button)e.Source;
foreach(Button button0 in FindVisualChildren<Button>(win))
{
if (btn != button0)
button0.IsEnable = false;
}
}
}
它使用以下方法。请参见按类型查找WPF窗口中的所有控件
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}