2016-05-13 83 views
1

這可能很簡單。不知道,我很驚訝,我無法找到解決方案。現在我的週末開始時,我可能不在意了:P。WPF - 訪問MouseOver上顯示的控件

目標:TreeView,每個項目都有一個CheckBoxContent。此外,還可以選擇刪除TreeViewItem,該選項僅在MouseOver上顯示。

問題是當我將鼠標懸停在項目上時,它觸發ButtonVisibility顯示出來。現在,當我嘗試將鼠標移動到Button刪除時,它現在得到Hidden,因爲IsMouseHoverfalse

下面是示例:

<TreeView Grid.Column="2" Name="trvMenu" HorizontalAlignment="Stretch" Margin="20" MaxHeight="200" ScrollViewer.VerticalScrollBarVisibility="Auto"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type local:TestPlan}" ItemsSource="{Binding Plans}"> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox Margin="5"/> 
       <TextBlock Text="{Binding Title}" Margin="5"/> 
       <Button Height="20" Width="20" x:Name="deletebutton" Margin="5" Visibility="Collapsed"> 
        <Image Source="/Images/cross.png" Height="20"/> 
       </Button> 
      </StackPanel> 
       <HierarchicalDataTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="deletebutton" Property="Visibility" Value="Visible" /> 
        </Trigger> 
       </HierarchicalDataTemplate.Triggers> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

我需要訪問ButtonMouseOver

有沒有簡單的方法來解決這個問題?

回答

3

我猜IsMouseOver獲取TextBoxButton因爲Margin之間因爲你StackPanel沒有Background丟失。

(如果Backgroundnull,它影響HitTestResult)

<StackPanel Background="Transparent" Orientation="Horizontal"> 

如果這還不夠,取出HierarchicalDataTemplate.Triggers,除去明確設置Visibility上的按鈕,使用這樣的事情,而不是(風格制定者俊男t覆蓋在特定條件下在XAML中設置的值):

<Button.Style> 
    <Style TargetType="Button"> 
     <Setter Property="Visibility" Value="Collapsed"></Setter> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}, Path=IsMouseOver}" Value="true"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Button.Style>