2016-12-21 5 views
0

Ich habe ein DataTemplate eines ItemsControl, das 2 Gitter enthält. Das zweite Raster ist ausgeblendet und ich möchte es sichtbar machen, wenn ich auf ein Element im ItemsControl klicke. HierWie mache ich ein Gitter in einem DataTemplateSelector sichtbar?

ist der XAML:

<ItemsControl.Resources> 
    <DataTemplate x:Key="magazineSlotTemplate"> 
     <Grid> 
      <Grid x:Name="buttonGrid"> 
       <Button Margin="4" Style="{StaticResource TransparentButtonStyle}" Click="ClickEvent"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="Auto"/> 
         </Grid.RowDefinitions> 
         <Path Width="48" Height="48" Fill="{Binding Color, Mode=OneWay}" Grid.RowSpan="2" Data="M24,14z"/> 
         <Ellipse Width="20" Height="20" Fill="{Binding ColorTwo, Mode=OneWay}" Grid.RowSpan="2"/> 
         <Image Width="48" Height="48" Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Grid.RowSpan="2" Source="pack://application:,,,/Resources/tool.png"/> 
         <ProgressBar Orientation="Vertical" Width="15" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"/> 
         <TextBlock Grid.Column="1" Grid.Row="0" Text="24%" FontSize="11"> 
          <TextBlock.LayoutTransform> 
           <RotateTransform Angle="-90"/> 
          </TextBlock.LayoutTransform> 
         </TextBlock> 
        </Grid> 
       </Button> 
      </Grid> 

      <Grid x:Name="editGrid" Visibility="Collapsed"> 
       <Grid x:Name="gridMare"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <Grid Grid.Row="0"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 
         <CheckBox Grid.Column="0" VerticalAlignment="Center" Margin="2,2,2,2" HorizontalAlignment="Center" IsChecked="{Binding IsPresent, Mode=OneWay}" IsEnabled="False"> 
          <CheckBox.LayoutTransform> 
           <ScaleTransform ScaleX="1.6" ScaleY="1.6"/> 
          </CheckBox.LayoutTransform> 
         </CheckBox> 
         <ComboBox x:Name="cmb" Grid.Column="1" Margin="2" ItemsSource="{Binding Available, Mode=OneWay}" SelectedValue="{Binding CurrentType}"/> 

        </Grid> 

Hier ist der Code, in dem hinter CECONTROL ist ein Datatemplateselector und MagazineSlotTemplate ist ein Datatemplate, die eine statische Ressource aus der obigen Vorlage verwendet.

Ich kann das das zweite Gitter in dem Code hinter sehen, aber wenn ich die Sichtbarkeit sichtbar gesetzt wird sichtbar, aber die Eigenschaft IsVisisble falsch ist somit kann ich das Gitter nicht sehen

private void ClickEvent(object sender, RoutedEventArgs e) 
{ 
    var template = ceControl.MagazineSlotTemplate.LoadContent() as FrameworkElement; 
    var myGrid = (Grid)template.FindName("editGrid"); 
    myGrid.Visibility = Visibility.Visible; 
    var visible = myGrid.IsVisible; 
} 

Antwort

1

Sie benötigen einen Verweis erhalten zu dem tatsächlichen Grid-Element, das auf dem Bildschirm sichtbar ist. Sie können es im visuellen Baum finden. Versuchen Sie folgendes:

private void ClickEvent(object sender, RoutedEventArgs e) 
{ 
    Button button = sender as Button; 
    Grid buttonGrid = button.Parent as Grid; 
    if (buttonGrid != null) 
    { 
     Grid grid = buttonGrid.Parent as Grid; 
     if (grid != null) 
     { 
      Grid editGrid = grid.Children.OfType<Grid>().FirstOrDefault(g => g.Name == "editGrid"); 
      if (editGrid != null) 
      { 
       editGrid.Visibility = Visibility.Visible; 
      } 
     } 
    } 
} 

Die DataTemplate.LoadContent() erzeugt neue Elemente, und diese sind nicht diejenigen, die Sie auf dem Bildschirm sehen.

+0

Danke, es hat funktioniert !!! – thiseful

Verwandte Themen