با سلام
دوستان من در ویندوز فرم از این تکه کد برای شناسایی و قفل کردن کنترل های روی فرم استفاده می کردم
اما در wpf دچار مشکل شدم
ممکنه دوستان بررسی کنند و نظرشون را بگن
ممنونم
foreach (Control Ctrl in this.Controls)
{
string x = Ctrl.GetType().ToString();
switch (Ctrl.GetType().ToString())
{
case "System.Windows.Forms.TextBox":
((TextBox)Ctrl).ReadOnly = !EditState;
break;
case "System.Windows.Forms.ComboBox":
ComboBox Ctr = new ComboBox();
((ComboBox)Ctrl).Enabled = EditState;
break;
case "System.Windows.Forms.CheckBox":
((CheckBox)Ctrl).Enabled = EditState;
break;
default:
break;
}
}
درست متوجه کدتون نشدم، لطفا داخل بخش Code این Editor وارد کنید و بیشتر توضیح دهید که کار اصلی کد چیست!؟. ولی بصورت کلی برای فعال یا غیرفعال کردن Element های صفحه شما می توانید از binding ویا از Trigger های داخل صفحه XAML استفاده کنید.
در مثال زیر زمانی که Checkbox تیک بخورد Textbox فعال میشود :
<CheckBox Name="checkBox1" /> <TextBox IsEnabled="{Binding ElementName=checkBox1, Path=IsChecked}" />
در مثال بعدی زمانی که Textbox خالی باشد دکمه مورد نظر غیر فعال میشود :
<StackPanel> <TextBox x:Name="TheTextBox" /> <Button Content="Click Me"> <Button.Style> <Style TargetType="Button"> <Setter Property="IsEnabled" Value="True" /> <Style.Triggers> <DataTrigger Binding="{Binding Text, ElementName=TheTextBox}" Value=""> <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </Button.Style> </Button> </StackPanel>
سلام
ببخشید من دیر جواب دادم.
من برای برنامه نویسی فرم های ورود داده سه حالت AddNew, Search, Edit را دارم.
در حالت عادی فرم تمامی کنترل های Text, Combo, chechbox و... لاک(Readonly) ولی فعال هستند و فقط در حالت AddNew, Edit فعالند.
در حالتهای AddNew , Edit دکمه های Delete, Search غیر فعال هستند
برای فعال یا غیر فعال کردن Element ها موجود در صفحه لازم نیست با روش Winforms این عمل را انجام دهید می توانید با غیر فعال کردن StackPanel , Wrap, ... که Element های شما در آن قرار دارد تمامی آنها را غیر فعال کنید و در صورتی که می خواهید تمام بخش های صفحه را غیر فعال کنید کافیست از ContentControl استفاده کنید و تمامی قسمت های خود را داخل آن قرار دهید و توسط نام آن تمامی کنترل ها را فعال یا غیر فعال کنید ، مثال:
<StackPanel> <Button Content="Enable/Disable" x:Name="btnClick" Click="btnClick_Click" Margin="5" Width="100"/> <ContentControl x:Name="MainControl"> <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="5"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="20"/> <RowDefinition Height="20"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="70"/> <ColumnDefinition Width="90"/> </Grid.ColumnDefinitions> <TextBlock Text="Fullname" Grid.Row="0" Grid.Column="0" /> <TextBox Grid.Row="0" Grid.Column="1"/> <TextBlock Text="Address" Grid.Row="1" Grid.Column="0"/> <TextBox Grid.Row="1" Grid.Column="1"/> </Grid> <Button Content="Update" Margin="5" Width="100"/> </StackPanel> </ContentControl> </StackPanel>
private void btnClick_Click(object sender, RoutedEventArgs e) { MainControl.IsEnabled = !MainControl.IsEnabled; }
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)