前台:
<HierarchicalDataTemplate ItemsSource="{Binding Path=Value}">
<TextBlock></TextBlock>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" Grid.Column="0" Background="Transparent">
<Image DockPanel.Dock="Left"></Image>
<TextBlock DockPanel.Dock="Left"></TextBlock>
</DockPanel>
<DockPanel Grid.Row="0" Grid.Column="0" Name="dockpanelauto" Background="Transparent">
<DockPanel x:Name="dockpanelimage" Background="Transparent" HorizontalAlignment="Right" Height="26" Width="42">
<ToggleButton HorizontalAlignment="Left" Name="toggle" Height="20" Width="20"></ToggleButton>
</DockPanel>
</DockPanel>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="toggle" Property="Visibility" Value="Visible"></Setter>
<Setter TargetName="dockpanelimage" Property="Background" Value="#EBF4FD"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="false">
<Setter TargetName="toggle" Property="Visibility" Value="Hidden"></Setter>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
后台:
private void itemborder_mousemove(object sender,MouseEventArgs e)
{
Border border = sender as Border;
Grid grid = border.Child as Grid;
Border bordertest = new Border();
ContentPresenter con = bordertest.Child as ContentPresenter;
if(con.Content !=null)
{
DependencyObject dependencyobject = VisualTreeHelper.GetChild(con, 0);
DockPanel dockpanelborder = VisualTreeHelper.GetChild(dependencyobject, 0) as DockPanel;
DockPanel dockpanelauto = VisualTreeHelper.GetChild(dependencyobject, 1) as DockPanel;
System.Windows.Annotations.peers.TreeViewAutomationPeer lvap = new System.Windows.Annotations.peers.TreeViewAutomationPeer(tree);
var svap = lvap.GetPattern(System.Windows.Annotations.Peers.PatternInterface.Scroll) as System.Windows.Annotations.Peers.ScrollViewerAutomationPeer;
var scroll1 = svap.Owner as ScrollViewer;
if (Isverticalscrollbarbutton(scroll1))
{
dockpanelauto.Width = dockpanelborder.ActualWidth;
}
else
{
if(scroll1.HorizontalOffset ==0)
{
dockpanelauto.Width = 388;
}
else
{
dockpanelauto.Width = this.ActualWidth - 123 + scroll1.HorizontalOffset;
}
}
dockpanelauto.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
}
}
public bool Isverticalscrollbarbutton(ScrollViewer s)
{
bool isatbttom = false;
double dver = s.HorizontalOffset;
double dviewport = s.ViewportWidth;
double dextent = s.ExtentWidth;
if (dver != 0 && dver + dviewport == dextent)
{
isatbttom = true;
}
else isatbttom = false;
return isatbttom;
}