Principales respuestas
CheckBox y ComboBox Silverlight 4

Pregunta
-
Hola que tal.. necesito ayuda con silverlight.. recien estoy empezando.. nose si va aca la pregunta pero bueno.. tengo un datagrid con dos columnas, donde en la primera tengo un checkbox y en la segunda un combobox.
Necesito que al tildar el checkbox se habilite el combobox y al destildar lo contrario... probe casi todo ya.. pero no puedo encontrar manera de obtener el objeto combobox para poder deshabilitarlo.. generalmente me tira un error "REFERENCIA A UN OBJETO NO ESTABLECIDA COMO INSTANCIA DE UN OBJETO" o algo asi je..
Desde ya muchas graciass...
Saludos
Respuestas
-
¡Hola!
Creo que te ayudará revisar el apunte del blog de Yeraoy sobre árboles; http://jyeray.blogspot.com/2010/09/wpf-arboles.html
Los métodos extensores estan en la entrada del foro: http://social.msdn.microsoft.com/Forums/es/wpfes/thread/8956494f-6fd0-4cb8-a567-82b22b9f7c4c
En concreto Lunes 12 (C# David) y Martes 13 (VB.Net mia). Ello te permiten alcanzar cualquier control. Tal vez sea esto lo que necesitas ;-).
Un saludo,
- Marcado como respuesta gnc24 martes, 9 de agosto de 2011 12:41
-
Hola
Disculpa la demora, no lo he probado pero intenta de esta manera:
DataGridColumn column = dataHorarios.Columns[1]; FrameworkElement fe = column.GetCellContent(dataHorarios.SelectedItem);
De esta forma fe tendrá la referencia del Combobox... espero te sirva porque estamos igual... ya sin cabello :P
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog- Marcado como respuesta gnc24 martes, 9 de agosto de 2011 12:41
Todas las respuestas
-
Por favor si alguien sabe algo o aunk sea una idea.. lo necesito para el trabajo me esatn apurando.. yo lo que intento hacer es de los eventos checked y uncheked del checkbox es tratar de bloquear o desbloquear el combobox.. pero el tema es que no puedo acceder al combo, no encuentro la forma o nose si habra otro evento que me deje hacer esto.
XAML
<Grid x:Name="LayoutRoot" Background="AliceBlue"> <Grid.RowDefinitions > <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="10"></RowDefinition> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="10*"></RowDefinition> </Grid.RowDefinitions> <Border Grid.RowSpan="4" BorderThickness="2" BorderBrush="DarkOliveGreen" CornerRadius="4" /> <Border Grid.Row="0" CornerRadius="5" BorderThickness="2" Background="#DEDEDE" BorderBrush="RoyalBlue"> <TextBlock x:Name="lblTexto" Grid.Row="0" FontSize="24" FontWeight="Normal" FontFamily="Arial" TextAlignment="Right" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Center" Width="160" Height="30" RenderTransformOrigin="0.5,0.5" > </TextBlock> </Border> <Border Grid.Row="1" Grid.RowSpan="3" CornerRadius="5" BorderThickness="2" Background="White" BorderBrush="RoyalBlue"> <sdk:DataGrid x:Name="dataHorarios" AutoGenerateColumns="False" LoadingRow="dataHorarios_LoadingRow" SelectionChanged="dataHorarios_SelectionChanged" CurrentCellChanged="dataHorarios_CurrentCellChanged" ItemsSource="{Binding}"> <sdk:DataGrid.Columns> <!--<sdk:DataGridCheckBoxColumn Width="27" x:Name="chboxHorarios" IsReadOnly="False" Binding="{Binding isValorPorDefecto, Mode=TwoWay}"> </sdk:DataGridCheckBoxColumn>--> <sdk:DataGridTemplateColumn Header="elegir" Width="20"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel> <CheckBox x:Name="checkTipoTarjeta" Checked="checkTipoTarjeta_Checked" Unchecked="checkTipoTarjeta_Unchecked"> </CheckBox> </StackPanel> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> <sdk:DataGridTemplateColumn Header="horarios" Width="130"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel> <ComboBox Name="cmbHorarios" Width="127" SelectionChanged="cmbHorarios_SelectionChanged"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock x:Name="txtHorarios" Text="{Binding descripcion}" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> </StackPanel> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> </sdk:DataGrid.Columns> </sdk:DataGrid> </Border> </Grid>
y los eventos que tengo...private void checkTipoTarjeta_Checked(object sender, RoutedEventArgs e) { int ver = this.dataHorarios.SelectedIndex; var ver2 = this.dataHorarios.SelectedItem; CheckBox check = new CheckBox(); ComboBox combo = new ComboBox(); check = sender as CheckBox; combo = sender as ComboBox; check = (CheckBox)dataHorarios.Columns[0].GetCellContent(ver).FindName("checkTipoTarjeta"); combo = (ComboBox)dataHorarios.Columns[1].GetCellContent(ver).FindName("cmbHorarios"); if (check.IsChecked == true) { combo.IsEnabled = true; } else { combo.IsEnabled = true; } }
Me tira un error encombo = (ComboBox)dataHorarios.Columns[1].GetCellContent(ver).FindName("cmbHorarios");
El error es "Referencia a objeto no establecida como instancia de un objeto." es pork combo = sender as combobox me devuelve nulo.
No consigo tomar ese combobox para darle un valor IsEnabled=true o false...
Muchas gracias...
- Propuesto como respuesta Antonio Lobo lunes, 8 de agosto de 2011 16:03
- Votado como útil Antonio Lobo lunes, 8 de agosto de 2011 16:03
-
Hola
Siempre me voy por la respuesta más fácil... estas usando un modelo para cargar tu DataGrid, por que no usas una variable mas que se llame Checked la cual va a tener el Bind del checkbox de esta manera:
<CheckBox x:Name="checkTipoTarjeta" IsChecked="{Binding Checked}"/>
Y tu Combobox tendría el bind de esta manera
<ComboBox Name="cmbHorarios" Width="127" IsEnabled="{Binding Checked}" SelectionChanged="cmbHorarios_SelectionChanged">
Así cuando tu checkbox se marque o desmarque el combobox se habilitará o deshabilitará
Que te parece esa solución? Es adecuada o necesitas de otra forma?
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog- Propuesto como respuesta CorsarioVasco lunes, 8 de agosto de 2011 16:32
-
-
Hola otra vez :)
Ahora revisando tu código en gran detalle, veo que no estas usando un modelo/entidad para cargar tu datagrid, tu solo estas agregando información al combobox haciendo un Binding.
Ahora con tu código:
combo = sender as ComboBox; En esta parte del código el sender es un Checkbox por eso es que te devuelve null
Mira si te sirve con esto:
DataGridRow row = dataHorarios.ItemContainerGenerator.ContainerFromIndex(dataHorarios.SelectedIndex); Combobox combo = dataHorarios.Columns[1].GetCellContent(row) as Combobox; Checkbox check = sender as Checkbox; if (combo != null) combo.IsEnabled = check.Checked;
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog -
gracias por responder tan rapido antonio.. puse el codigo en el evento checkTipoDeTarjeta_Checked pero me tira dos errores uno en
ItemContainerGenerator, que el error es:
"System.Windows.Controls.DataGrid' does not contain a definition for 'ItemContainerGenerator' and no extension method 'ItemContainerGenerator' accepting a first argument of type 'System.Windows.Controls.DataGrid' could be found (are you missing a using directive or an assembly reference?)"
Y en combo.IsEnabled=check.Checked:
"The event 'System.Windows.Controls.Primitives.ToggleButton.Checked' can only appear on the left hand side of += or -="
Realmente no puedo bloquear ese combo!! me estoy quedando sin pelos ya!! ja
-
Acabo de probar con este codigo...
pero sigue devolviendome null en el combo.. es tan complicado acceder a un control desde un evento ajeno??int indexData = this.dataHorarios.SelectedIndex; ComboBox combo = dataHorarios.Columns[1].GetCellContent(indexData) as ComboBox; CheckBox checkOn = sender as CheckBox; if (combo != null) { //combo.IsEnabled = checkOn.Checked; }
-
Hola
Disculpa la demora, no lo he probado pero intenta de esta manera:
DataGridColumn column = dataHorarios.Columns[1]; FrameworkElement fe = column.GetCellContent(dataHorarios.SelectedItem);
De esta forma fe tendrá la referencia del Combobox... espero te sirva porque estamos igual... ya sin cabello :P
Antonio Lobo
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi blog- Marcado como respuesta gnc24 martes, 9 de agosto de 2011 12:41
-
¡Hola!
Creo que te ayudará revisar el apunte del blog de Yeraoy sobre árboles; http://jyeray.blogspot.com/2010/09/wpf-arboles.html
Los métodos extensores estan en la entrada del foro: http://social.msdn.microsoft.com/Forums/es/wpfes/thread/8956494f-6fd0-4cb8-a567-82b22b9f7c4c
En concreto Lunes 12 (C# David) y Martes 13 (VB.Net mia). Ello te permiten alcanzar cualquier control. Tal vez sea esto lo que necesitas ;-).
Un saludo,
- Marcado como respuesta gnc24 martes, 9 de agosto de 2011 12:41
-
-