2016-12-21 6 views
0

2グリッドを含むItemsControlのDataTemplateがあります。 2番目のグリッドが折りたたまれていて、ItemsControlで項目をクリックすると、2番目のグリッドが表示されます。ここDataTemplateSelectorでグリッドを表示する方法

は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> 

はceControlがDataTemplateSelectorとMagazineSlotTemplateは、上記テンプレートから静的リソースを使用するDataTemplateであるの背後にあるコードです。

私は背後にあるコードで第2のグリッドを見ることができますが、私は目に見えるの可視性を設定したとき、私はあなたが参照を取得する必要がありますグリッド

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; 
} 

答えて

1

を見ることができない目に見えるようになるが、プロパティIsVisisbleは、このように偽であります画面上に表示されている実際のGrid要素に移動します。あなたはビジュアルツリーでそれを見つけることができます。これを試してみてください:

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; 
      } 
     } 
    } 
} 

DataTemplate.LoadContent()新しい要素を作成し、これらを使用すると、画面上に表示するものではありません。

+0

ありがとうございました! – thiseful

関連する問題