2015-12-04 3 views
1

Я хотел бы спросить вас, если возможно иметь ItemsControl без фона (x: null), а не прозрачно.ItemsControl with none background WPF

У меня есть коллекция с данными, и они отображаются в ItemsControl с помощью DataTemplate. Некоторые данные в datatemplate рухнули, и мне нужно иметь возможность щелкнуть мышью на другом элементе управления, стоящем за элементом управления itemscontrol.

Вот пример того, что я имею в виду:

<Button x:Name="bt_behind"></Button> 
<ItemsControl ItemsSource="{Binding ListOfData}" Background="{x:Null}"> 
     <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" Background="{x:Null}"></StackPanel> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate DataType="{x:Type Class:Data}"> 
        <Grid Width="100" Background="{x:Null}"> 
          <Rectangle x:Name="rec" Fill="Red" Height="100" Visibility="Collapsed"> 
        </Grid> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding IsVisible}" Value="true"> 
          <Setter TargeName="rec" Property="Visibility" Value="Visible"/> 
         </DataTrigger> 
        <DataTemplate.Triggers> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
</ItemsControl> 

Example where item3 is partly collapsed and marked area, where is empty place

я установил везде фон обнулить (попробуйте ItemContainerStyle тоже), но без успеха. На кнопке за пунктом ItemsControl по-прежнему нельзя щелкнуть. Я думаю, что ItemsControl имеет прозрачный фон для событий, но можно ли удалить этот фон?

Спасибо за любые советы и извините за мой английский :)

-pav-

+0

Это стоит подготовить [mcve] (http://stackoverflow.com/help/mcve), если вы хотите, чтобы кто-то попробовать свой код (который даже не компилировать-состоянии в текущей форме). Вы пытались «IsHitTestVisible»? – Sinatr

+0

Все работает с x: Нуль для фона ... Не знаю, что не так с вашим кодом. Кроме того, PLS, исправить ваш XAML в вопросе. – Spawn

ответ

0

Ну, как я сказал, все это работает. Фиксированный XAML:

<Grid> 
    <Button x:Name="bt_behind" Content="behind" Click="Bt_behind_OnClick"/> 
    <ItemsControl ItemsSource="{Binding ListOfData}" Background="{x:Null}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" Background="{x:Null}"></StackPanel> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate DataType="{x:Type local:Data}"> 
       <Grid Width="100" Background="{x:Null}"> 
        <Rectangle x:Name="rec" Fill="Red" Height="100" Visibility="Collapsed"/> 
       </Grid> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding IsVisible}" Value="true"> 
         <Setter TargetName="rec" Property="Visibility" Value="Visible"/> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

Просто для испытания.

private void Bt_behind_OnClick(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show(""); 
} 
+0

Спасибо за ответ. Я понял, что ItemsControl находится внутри ScrollViewer. И ScrollViewer имеет пользовательский HitTesting (фон для null не работает), поэтому кнопка не может быть нажата. Я забыл об этом. Я сосредоточился на ItemsControl. Очень спасибо за тестирование. – pav